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.

<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!

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s