Show Menu
Cheatography

JBoss-Forge Cheat Sheet (DRAFT) by

Die wichtigsten Befehle von JBoss Forge

This is a draft cheat sheet. It is a work in progress and is not finished yet.

Grundk­omm­andos

forge
Starte Forge
comman­d-list
Zeigt die verfüg­baren Kommandos an
man <co­mma­nd>
Erläutert das angefragte Kommando
projec­t-new
Erstellt interaktiv ein neues Projekt und wechselt in dessen Kontext
cd ..
Geht einen Kontext zurück (auf dem Stack)
cd <su­ite­m>
Betritt einen neuen Kontext z.B. ein Unterv­erz­eic­hnis, ein Projekt oder eine Datei
exit
Beendet das Programm
Forge Download: http:/­/fo­rge.jb­oss.or­g/d­ownload
System­vor­aus­set­zung: Java7 und gesetzte JAVA_HOME Variable
Instal­lation unter Linux: curl http:/­/fo­rge.jb­oss.org/sh | sh

Container und Instan­zve­rwa­ltung

Mangels Doku habe ich mit ein paar kleinen Analysen versucht heraus­zuf­inden wie die Container und Instanzen verwaltet werden. Dabei habe ich einfach in versch­iedenen Termin­alf­enstern forge gestartet und festge­stellt:
* Jedes Terminal startet einen eigenen Forge Container
* Der erste gestartete Forge Container scheint als Template bei der Initia­lis­ierung der anderen Forge Container zu dienen - er wird nach Beenden von Forge scheinbar mit dem aktuellen Stand gespei­chert und dient anschl­ießend wieder als Template (evtl. durch System­sperren 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 existi­eren. Ein erneuter Aufruf eines Kommandos kennt daher schon Belegungen interner Felder z.B. per Prompt injizi­erter Werte

Dynamische Vorbel­egung 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 initia­liz­eUI­(UI­Builder 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 wichti­gsten Defini­tionen.