Standalone Generator im ersten Praxistest

in  Basics , , ,

Standalone Generator im ersten Praxistest

Gastbeitrag von Ralf Köster

Habt ihr schon mitbekommen, dass es seit 0.7.3 auch einen standalone Generator gibt? Sicherlich habt ihr dass, aber ihr fragt euch, was ihr damit machen könnt? Ich versuche hier einmal zu beschreiben, was ich damit mache.

Ich selber komme aus der Windows-Ecke. Für uns passt das Beispiel aus der Doku mit wget usw. nur bedingt. Aber auch unter Windows kann der Generator gute Dienste leisten. Unter Windows haben die guten alten *.bat-Dateien schon länger ausgedient. Dafür verwendet man heutzutage besser PowerScript (PS), was bei Windows ab Windows 7 bereits mit an Bord ist.

Im Beitrag über mein aktuelles Projekt habe ich beschrieben, dass ich mehrere MOST-Module in Arbeit habe. Jedes Mal, wenn Axel wieder eine Änderung oder eine Fehlerbeseitigung eingebracht hat. muss man nun seine Module neu generieren. Bei mir sind das derzeit 5 Module. Das ist schon eine Menge Klickerei. Mittels PS-Datei kann man sich das viel einfacher machen.

Standalone Generator herunterladen

Als erstes müssen wir mal PS starten. Naja, PS braucht man nicht zu starten, aber es gibt da eine schöne App. Also tippen wir im Suchfeld im Startmenü mal Power ein. Da kommt dann soetwas wie “Windows Powershell ISE” Das öffnen wir erst einmal. Das ist dann die Komandozeile von Windows. Sie funktioniert sehr ähnlich, wie die Komandozeile von Linuxsystemen (siehe meinen Beitrag dazu). Da wget nicht von Haus aus bei PS dabei ist, habe ich mal geschaut, was es da als Alternative gibt. Invoke heißt der dazugehörige Befehl. Um den Generator zu laden, geben wir Folgendes in der Kommandozeile ein:

invoke-webrequest https://github.com/Guite/MostGenerator/releases/download/standalone/ModuleStudio-generator.jar -OutFile ModuleStudio-generator.jar

Der -OutFile Parameter ist dabei ganz wichtig, da sonst das Programm zwar heruntergeladen, aber nicht abgespeichert wird. Mir ist das Eintippen aber zu lästig, also habe ich mir dafür ein Script geschrieben.

# Wir sagen hier dem Skript, wo es den Standalone Generator hinspeichern soll
$pfad="C:\Users\Ralf\MostGenerator\"

# Nun wechseln wir in genau diesen Pfad, um dorthin den Generator zu speichern
cd $pfad
write-host "Lade jetzt den aktuellen Generator herunter. Habe ein wenig Geduld. Abhängig von der Bandbreite dauert es ein wenig, bis der Generator heruntergeladen wurde."

# Hier werden wir kurz erinnert, wohin wir den Generator speichern
write-host $pfad

# Nun laden wir den Generator tatsächlich herunter
invoke-webrequest https://github.com/Guite/MostGenerator/releases/download/standalone/ModuleStudio-generator.jar -OutFile ModuleStudio-generator.jar

# Wir lassen das Fenster solange offen, bis wir enter gedrückt haben, damit wir sehen, ob es noch irgendwelche Fehlermeldungen gegeben hat
Read-host ‘Fertig! Drücke Enter zum Schließen des Fensters’

Abgespeichert habe ich das unter “Generator aktualisieren ps1”. Wo das Script dann später liegt, ist egal, da wir immer in das passende Verzeichnis springen. Doch aus Sicherheitsgründen ist es nicht erlaubt, das Script auszuführen. Dazu gibt es viele Tutorials im Internet, wie man das bewerkstelligen kann. Man muss es nur sehr sorgfältig machen, da man sich sonst Sicherheitslücken im System einfängt. Ein guter Einstiegspunkt ist da sicherlich das technet von Microsoft.

Mit dem Skript kann man nun komfortabel den Generator herunterladen.

Stapelverarbeitung bei der Modulgenerierung

Das ist nun der interessante Teil. Auch hier kann man erst einmal auf der Komandozeile arbeiten.

java -jar ModuleStudio-generator.jar MyModel.mostapp

Das funtioniert genaus, wie in der Dokumentation beschrieben. Aber spannend wird das erst wieder, wenn wir das in einem Skript einbauen. Ich habe das wie folgt gelöst:

# In welchem Verzeichnis liegt der Zielordner? \ am Ende nicht vergessen!
$zielpfad="D:\Users\Ralf\_Entwicklung\github\pggo\core\"

# Wie soll der Zielordner heißen? Bei mir immer genauso, wie er in Zikula heißt
$zielordner="modules"

# Wo liegt der Generator?
$generator="C:\Users\Ralf\MostGenerator\ModuleStudio-generator.jar"

# Welche Module sollen in einem Rutsch generiert werden?
# Bitte Modulnamen in Hochkommata und mit Komma getrennt ins Array schreiben
$module=@("Helper", "Instititutionen", "MediaAttach", "Download", "Team" )

# Damit der Generator die Module findet, müssen wir ihm noch sagen, wo die Module liegen.
# Auch hier das \ am Ende nicht vergessen
$workspace="C:\Users\Ralf\MostWorkspace\"

# Ab hier ist die Konfiguration abgeschlossen.
# lasst das Skript für euch arbeiten :-)

# Wir müssen in den Zielpfad wechseln, weil sont der Modulordner nicht angelegt werden kann
cd $zielpfad

for ($i=0; $i < $module.length; $i++){
    $pfad=$workspace+$module[$i] + "\" + $module[$i] + ".mostapp"
    $zpfad=$zielpfad+$zielordner+"\vendor\"+$module[$i]
    $j=$i+1

    java -jar $generator $pfad $zielordner
}

read-host "Mit Enter Fenster schließen" -foregroundcolor green -backgroundcolor black

Das Skript ist durch seine Kommentare gut erklärt. Wer die Weiterentwicklung verfolgen will, kann sich gerne bei mir im Projekt umschauen.

Jetzt wird klar, warum ich in meinem ersten Artikel in dieser kurzen Reihe die Projektstruktur so gewählt habe. Durch Ausführen des Skriptes aktualisiert sich mein Projekt nach Bedarf. Was ich noch nicht eingebaut habe, ist das vorherige Löschen des Modulordners, damit da keine Artefakte mehr übrig bleiben, wenn man am Modul zuviel geändert hat. Das baue ich bei Zeiten noch in mein Skript mit ein.

Fazit:
Mittels dem Stand-alone Generator kann ich nun in wenigen Minuten meine Module aktualisieren.

Danke Axel!

Viel Spaß mit ModuleStudio,

Ralf