Java Getriebe

Java und NetBeans

Ant-basierte Suite Projekte mit Jenkins erstellen

Auf dem letzten NetBeans Training wurde ich von Geertjan gefragt wie wir bei uns den Continuous Integration Server Jenkins dazu nutzen um unsere WZL Gear Toolbox automatisch generieren zu lassen. Das großen Problem ist, dass Jenkins zwar sehr einfach Maven Builds einbinden kann und zusammen mit Maven auch Suiteprojekte sehr einfach einzufügen ist aber für Ant-basierte Projekten funktioniert das so einfach nicht. Das Buildskript benötigt einige Informationen wo zum Beispiel die NetBeans Platform selber sich befindet. Ein so genannter „headless build“ wird von NetBeans selbst nicht unterstützt.

An dieser Stelle werde ich nur eine Schnellanleitung abliefern. In einem folgenden Artikel kommen dann die ganzen Hintergrundinfos dazu, warum das ganze so ist. Ich setzte einmal voraus, dass man weiß, die man Jenkins konfiguriert und wie man einen neuen Job anlegt. Diese Anleitung bezieht sich nur auf ein einzelnes Suite-Projekt, das nur Abhängigkeiten auf eine NetBeans Platform hat und keine weiteren Suiten als Cluster einbindet. In meiner Konfiguration nutze ich diese Funktion zwar, aber damit werde ich mich noch mal in einem getrennten Artikel beschäftigen.

  1. Als allererstes wird dieses Skript: headless.xml benötigt, welches am besten im Projektverzeichnis des Suiteprojekts gespeichert werden sollte.
  2. Danach sollte man sich von der Downloadseite von NetBeans das Paket mit der Endung „*-ml-javase.zip“ herunterladen ((Puristen können auch die *-ml.zip Version nutzen, aber da ist kein IDE Cluster enthalten)) und an eine geeignete Stelle auf dem Jenkins Server entpacken.
  3. In der Jenkins Konfiguration sollte eine Umgebungsvariable für diese NetBeans Plattform definiert haben. Bei mir habe ich zum Beispiel eine Variable NETBEANS_69 angelegt und als Wert den Pfad in dem ich die ZIP-Datei entpackt habe gesetzt.
  4. Im eigentlichen Job muss man nur noch zwei Ant-„Built steps“ angelegt werden. Beim ersten muss unter „Erweitert“ als Skriptname die oben heruntergeladene „headless.xml“ angegeben werden. Ebenso muss das Verzeichnis der NetBeans Platform im „Systemeigenschaften“ Feld angegeben werden:

    headless.netbeans.dir=${NETBEANS_69}

    Das „Target“ kann leer bleiben oder auch das Standardtarget build-headless angegeben werden.

  5. Der zweite Ant-Step enthält dann die eigentliche Build-Anweisung. Ich erzeuge normalerweise immmer die Zip Distribution und die NBMs gleichzeitig:

    build-zip nbms
    -logger org.apache.tools.ant.listener.BigProjectLogger

Wie oben zu sehen nutze ich die definierte Umgebungsvariable NETBEANS_69 um den Pfad zur Plattform an das Skript weiter zu reichen. Dadurch ist dieser Build auch auf Slave Knoten nutzbar, wenn die Umgebungsvariable entsprechend im Knoten angepasst wird.