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.
<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>
Im Detail:
Die Dependencies müssen die verwendete Template Engine enthalten, in diesem Fall FreeMarker.
<dependencies> <!-- for freemarker templates (.ftl) --> <dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> <version>2.3.20</version> </dependency> </dependencies>
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.
<configuration> <inputDirectory>${project.basedir}/src/main/resources</inputDirectory> <outputDirectory>${project.build.directory}/classes</outputDirectory> </configuration>
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).
<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>
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!