JBake is a “Java based, open source, static site generator” (http://jbake.org/, on github https://github.com/jbake-org/jbake). It is a great choice if you want to create static HTML websites. No slow loading of dynamic content anymore. Additionally, if a site is created on load by JavaScript, issues with indexing and search engine optimization/SEO might occur. This is not a problem with static sites. At the same time different template engines like FreeMarker (http://freemarker.org/) help you modularize the website. You only have to define menu and footer once and they will be inserted automatically.
JBake was perfect for us to create a microsite with 15 different pages and lots of reappearing elements. We integrated JBake into Maven to create a comfortable release process. To do this we used the plug-in jbake-maven-plugin
(https://github.com/ingenieux/jbake-maven-plugin). This sample project shows the fundamental integration: https://github.com/ingenieux/jbake-sample.
While integrating JBake into Maven you have to consider a few things. For our site we used Maven-3.0.5, JDK-1.7.0-71 and jbake-maven-plugin-0.0.3, because we had version conflicts with other combinations (newer version of jbake-maven-plugin
need Maven-3.1.1).
This is the plug-in configuration of the 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]
In detail:
The dependencies need the definition of the template engine, FreeMarker in this case.
[code language=”xml”]
<dependencies>
<!– for freemarker templates (.ftl) –>
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.20</version>
</dependency>
</dependencies>
[/code]
The configuration of the directories is very important. Per default the jbake-maven-plugin
uses the path src/main/jbake
. This doesn’t go well with the default path src/main/resources
, which is used by lots of other plug-ins. Additionally, all the freshly baked goods are supposed to end up in the /classes
directory.
[code language=”xml”]
<configuration>
<inputDirectory>${project.basedir}/src/main/resources</inputDirectory>
<outputDirectory>${project.build.directory}/classes</outputDirectory>
</configuration>
[/code]
After that everything can be packaged and we can ignore all the files that aren’t needed anymore. To do this we configured the jar-plugin (or zip, depending on what you use). The source files of /assets
, /content
and /templates
can be excluded (the .less
files are from LESS integration, not from JBake. The template-draft.html
is an internal template that shouldn’t end up on the server).
[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]
And that was it. With a mvn clean install
we can easily bake together all content files and the result is a static site.
Happy baking!