Integration von JBake in Maven – Statische Websites

JBake ist ein “Java-basierter, open source Generator für statische Seiten” (http://jbake.org/, auf github https://github.com/jbake-org/jbake). Bestens geeignet, um statische HTML-Seiten zu erstellen. Das langsame Laden von dynamischen Inhalten entfällt. Ebenso Probleme, die bei der Indexierung und Suchmaschinenoptimierung/SEO auftreten können, wenn die Seite erst beim Laden per JavaScript zusammengesetzt wird. Gleichzeitig bieten verschiedene Template Engines, wie bspw. FreeMarker (http://freemarker.org/) den Vorteil der Modularisierung. Menü und Footer müssen nur einmalig definiert werden und können durch verschiedene Vorlagen automatisch eingefügt werden.

Für unsere Micro-Site mit ca. 15 Unterseiten mit vielen wiederkehrenden Elementen bietet sich JBake hervorragend an. Wir haben JBake in Maven integriert und damit einen komfortablen Release-Prozess erstellt. Dafür haben wir das Plug-in jbake-maven-plugin verwendet (https://github.com/ingenieux/jbake-maven-plugin). Dieses Beispielprojekt auf github zeigt die grundlegende Integration: https://github.com/ingenieux/jbake-sample.

Dabei sind einige Dinge zu beachten, damit alles reibungslos läuft. Für unsere Seite haben wir Maven-3.0.5 und JDK-1.7.0-71 und jbake-maven-plugin-0.0.3 verwendet, nachdem einige Versionskonflikte aufgetreten waren (Neuere Versionen von jbake-maven-plugin benötigen Maven-3.1.1).

Hier ist die Plug-in-Konfiguration der pom.xml.

[code language=”xml”]
<plugin>
<groupId>br.com.ingenieux</groupId>
<artifactId>jbake-maven-plugin</artifactId>
<version>0.0.3</version>
<executions>
<execution>
<id>default-generate</id>
<phase>generate-resources</phase>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
<configuration>
<inputDirectory>${project.basedir}/src/main/resources</inputDirectory>
<outputDirectory>${project.build.directory}/classes</outputDirectory>
</configuration>
<dependencies>
<!– for freemarker templates (.ftl) –>
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.20</version>
</dependency>
</dependencies>
</plugin>
[/code]

Im Detail:

Die Dependencies müssen die verwendete Template Engine enthalten, in diesem Fall FreeMarker.

[code language=”xml”]
<dependencies>
<!– for freemarker templates (.ftl) –>
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.20</version>
</dependency>
</dependencies>
[/code]

Besonders wichtig ist die Konfiguration der Directories. Per Default verwendet das jbake-maven-plugin den Pfad src/main/jbake. Das verträgt sich nicht mit dem Standard-Pfad src/main/resources, der von vielen andere Plug-ins verwendet wird. Außerdem soll alles, was gebacken wurde im /classes Verzeichnis landen.

[code language=”xml”]
<configuration>
<inputDirectory>${project.basedir}/src/main/resources</inputDirectory>
<outputDirectory>${project.build.directory}/classes</outputDirectory>
</configuration>
[/code]

Beim Packen können dann alle nicht mehr benötigten Dateien ignoriert werden. Dazu haben wir einfach beim jar-Plug-in (oder zip, je nachdem, was verwendet wird) die Quelldateien in /assets, /content und /templates auf exclude gesetzt (die .less Dateien stammen von der LESS-Integration und nicht von JBake. Die template-draft.html ist eine interne Vorlage, die nicht auf dem Server landen soll).

[code language=”xml”]
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<configuration>
<excludes>
<exclude>**/less</exclude>
<exclude>**/*.less</exclude>
<exclude>**/assets</exclude>
<exclude>**/assets/**</exclude>
<exclude>**/content</exclude>
<exclude>**/content/**</exclude>
<exclude>**/templates</exclude>
<exclude>**/templates/**</exclude>
<exclude>**/template-draft.html</exclude>
</excludes>
</configuration>
</plugin>
[/code]

Das war es dann auch schon. Mit einem mvn clean install werden dann automatisch die Inhalte zusammengebacken und das Ergebnis ist eine statische Seite.

Happy Baking!