Installation & Configuration
Installation
Pebble is hosted in the Maven Central Repository. Simply add the following dependency into your pom.xml
file:
<dependency>
<groupId>io.pebbletemplates</groupId>
<artifactId>pebble</artifactId>
<version>3.2.2</version>
</dependency>
Also, snapshots of the master branch are deployed automatically with each successful commit. Instead of Maven Central, use the Sonatype snapshots repository at:
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
You can add the repository in your pom.xml
<repositories>
<repository>
<id>sonatype-public</id>
<name>Sonatype Public</name>
<url>https://oss.sonatype.org/content/groups/public</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
Set Up
If you are integrating Pebble with Spring MVC, read this guide.
You will want to begin by creating a PebbleEngine
which is responsible for coordinating the retrieval and
compilation of your templates:
PebbleEngine engine = new PebbleEngine.Builder().build();
And now, with your new PebbleEngine
instance you can start compiling templates:
PebbleTemplate compiledTemplate = engine.getTemplate("templateName");
Finally, simply provide your compiled template with a Writer
object and a Map of variables to get your output!
Writer writer = new StringWriter();
Map<String, Object> context = new HashMap<>();
context.put("name", "Mitchell");
compiledTemplate.evaluate(writer, context);
String output = writer.toString();
Template Loader
The PebbleEngineBuilder
will also accept a Loader
implementation as an argument. A loader is responsible for
finding your templates.
Pebble ships with the following loader implementations:
ClasspathLoader
: Uses a classloader to search the current classpath.FileLoader
: Finds templates using a filesystem path.ServletLoader
: Uses a servlet context to find the template. This is the recommended loader for use within an application server but is not enabled by default.Servlet5Loader
: Same asServletLoader
, but for Jakarta Servlet 5.0 or newer.StringLoader
: Considers the name of the template to be the contents of the template.DelegatingLoader
: Delegates responsibility to a collection of children loaders.MemoryLoader
: Loader that supports inheritance and doesn't require a filesystem. This is useful for applications that retrieve templates from a database for example.
If you do not provide a custom Loader, Pebble will use an instance of the DelegatingLoader
by default.
This delegating loader will use a ClasspathLoader
and a FileLoader
behind the scenes to find your templates.
Pebble Engine Settings
All the settings are set during the construction of the PebbleEngine
object.
Setting | Description | Default |
---|---|---|
cacheActive | Flag to activate/desactivate template caching | true |
templateCache | An implementation of a ConcurrentMap cache that the Pebble engine will use to cache compiled templates. | Default implementation is ConcurrentMapTemplateCache and another implementation based on Caffeine is available (CaffeineTemplateCache ) |
tagCache | An implementation of a ConcurrentMap cache that the Pebble engine will use for cache tag. | Default implementation is ConcurrentMapTagCache and another implementation based on Caffeine is available (CaffeineTagCache ) |
defaultLocale | The default locale which will be passed to each compiled template. The templates then use this locale for functions such as i18n, etc. A template can also be given a unique locale during evaluation. | Locale.getDefault() |
executorService | An ExecutorService that allows the usage of some advanced multithreading features, such as the parallel tag. | null |
loader | An implementation of the Loader interface which is used to find templates. | An implementation of the DelegatingLoader which uses a ClasspathLoader and a FileLoader behind the scenes. |
strictVariables | If set to true, Pebble will throw an exception if you try to access a variable or attribute that does not exist (or an attribute of a null variable). If set to false, your template will treat non-existing variables/attributes as null without ever skipping a beat. | false |