Cheatography
https://cheatography.com
Die wichtigsten Befehle von JBoss Forge
This is a draft cheat sheet. It is a work in progress and is not finished yet.
Grundkommandos
forge |
Starte Forge |
command-list |
Zeigt die verfügbaren Kommandos an |
man <command> |
Erläutert das angefragte Kommando |
project-new |
Erstellt interaktiv ein neues Projekt und wechselt in dessen Kontext |
cd .. |
Geht einen Kontext zurück (auf dem Stack) |
cd <suitem> |
Betritt einen neuen Kontext z.B. ein Unterverzeichnis, ein Projekt oder eine Datei |
exit |
Beendet das Programm |
Container und Instanzverwaltung
Mangels Doku habe ich mit ein paar kleinen Analysen versucht herauszufinden wie die Container und Instanzen verwaltet werden. Dabei habe ich einfach in verschiedenen Terminalfenstern forge gestartet und festgestellt:
* Jedes Terminal startet einen eigenen Forge Container
* Der erste gestartete Forge Container scheint als Template bei der Initialisierung der anderen Forge Container zu dienen - er wird nach Beenden von Forge scheinbar mit dem aktuellen Stand gespeichert und dient anschließend wieder als Template (evtl. durch Systemsperren auf Dateien in denen der Zustand gesichert wird - unklar wo der Zustand gesichert wird)
* Kommandos scheinen als Singleton im Container gestartet zu werden und nach Beendigung des Kommandos weiter zu existieren. Ein erneuter Aufruf eines Kommandos kennt daher schon Belegungen interner Felder z.B. per Prompt injizierter Werte |
Dynamische Vorbelegung der Auswahl
projectDirName.setDefaultValue(
new Callable<String>() {
@Override
public String call() {
if (artifactId.getValue() == null) {
return "myproject";
}
return artifactId.getValue();
}
});
|
Anzuwenden im eigenen UICommand in der Methode:
@Override
public void initializeUI(UIBuilder builder) throws Exception {
|
|
Eigenes Kommando definieren
public class RadesNewLibraryProject extends AbstractUICommand implements UICommand {
@Inject
protected ResourceFactory resourceFactory;
@Inject
@WithAttributes(label = "Group ID:"
, required = true, defaultValue = "com.github.myUsername")
protected UIInput<String> groupId;
@Override
public UICommandMetadata getMetadata(UIContext context) {
return Metadata.forCommand(RadesNewLibraryProject.class)
.name("my-project-generator")
.description("Creates a RADES lib project.")
.category(Categories.create("Project/Generation"));
}
@Override
public boolean isEnabled(UIContext context) {
return true; // logik ob commando verfügbar oder nicht
}
@Override
public void initializeUI(UIBuilder builder) throws Exception {
builder.add(groupId);
}
@Override
public Result execute(UIExecutionContext context) throws Exception {
final UIContext uiContext = context.getUIContext();
final UIOutput log = uiContext.getProvider().getOutput();
final UIPrompt prompt = context.getPrompt();
return Results
.success("Kommando 'rades-new-libproject' wurde erfolgreich ausgeführt.");
}
}
|
Klasse oben zeigt die wichtigsten Definitionen.
|