--Using Mustache template engine JMustache in Java --Operation check environment this time: Java 14 (AdoptOpenJDK 14.0.2 + 12) + JMustache 1.15 + Gradle 6.5.1 + macOS Catalina
├── build.gradle
└── src
    └── main
        ├── java
        │   ├── SampleApp.java
        │   └── SampleData.java
        └── resources
            └── my_template.html
build.gradle
plugins {
  id 'application'
}
repositories {
  mavenCentral()
}
dependencies {
  // https://mvnrepository.com/artifact/com.samskivert/jmustache
  implementation 'com.samskivert:jmustache:1.15'
}
application {
  mainClassName = 'SampleApp'
}
src/main/java/SampleApp.java
import com.samskivert.mustache.Mustache;
import com.samskivert.mustache.Template;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
public class SampleApp {
  public static void main(String[] args) throws IOException {
    new SampleApp().invoke();
  }
  public void invoke() throws IOException {
    //Load Mustache template file
    String templateText = getResourceText("my_template.html");
    Template template = Mustache.compiler().compile(templateText);
    //Pour objects into Mustache templates
    SampleData data = new SampleData();
    String out = template.execute(data);
    //Output the result
    System.out.println(out);
  }
  //Read a file from the resource directory
  public String getResourceText(String path) throws IOException {
    try (InputStream is = getClass().getResourceAsStream(path)) {
      return new String(is.readAllBytes(), StandardCharsets.UTF_8);
    }
  }
}
src/main/java/SampleData.java
import java.util.List;
import java.util.Map;
public class SampleData {
  public String foo = "foo";
  public String getBar() {
    return "bar";
  }
  public String[] strings = {"S1", "S2", "S3"};
  public List list = List.of("L1", "L2", "L3");
  public Map map = Map.of("key1", "value1", "key2", "value2", "key3", "value3");
}
src/main/resources/my_template.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
foo: {{foo}}<br>
getBar(): {{bar}}<br>
<br>
strings:<br>
{{#strings}}
  value: {{.}}<br>
{{/strings}}
<br>
list:<br>
{{#list}}
  value: {{.}}<br>
{{/list}}
<br>
map:<br>
{{#map}}
  {{key1}}, {{key2}}, {{key3}}
{{/map}}
</body>
</html>
$ gradle run
> Task :run
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
foo: foo<br>
getBar(): bar<br>
<br>
strings:<br>
  value: S1<br>
  value: S2<br>
  value: S3<br>
<br>
list:<br>
  value: L1<br>
  value: L2<br>
  value: L3<br>
<br>
map:<br>
  value1, value2, value3
</body>
</html>
Recommended Posts