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!