我正在研究ratpack.io网络应用程序,并使用gradle作为构建工具。模板是从src/main/thymeleaf
目录中的模板文件呈现的,该目录在运行时运行良好(仅使用gradle run
)。
$ ls ./src/main/thymeleaf
home.html
在创建不包含模板文件的uber jar时遇到问题。当我打开输出jar文件时,我看到thymeleaf
目录为空。
我知道shadow-jar进程的一部分是将所有依赖项合并到一个jar中,但是我不确定我需要做的还包括模板文件。我尝试创建包含html文件的特殊规则,但是最终我在罐子中只得到html文件,而从thymeleaf目录中什至没有。
答案 0 :(得分:1)
您是否有任何理由将模板文件保存在src/main/thymeleaf
中?默认情况下,Thymeleaf模板应存储在src/ratpack/thymeleaf
目录中。
ThymeleafModule
类定义用于存储所有模板的文件夹名称。默认值为thymeleaf
,当您创建shadowJar时,您应该在JAR归档文件中找到一个文件夹thymeleaf
。 shadowJar可以将src/ratpack/thymeleaf
毫无问题地复制到此目的地。
基于Java的Ratpack项目默认情况下不知道src/ratpack
,但是您可以通过在.ratpack
中创建一个名为src/ratpack
的空文件并配置server -> server.findBaseDir()
来轻松配置它(下面是更详细的示例。
这是一个简单的例子:
build.gradle
buildscript {
repositories {
jcenter()
}
dependencies {
classpath "io.ratpack:ratpack-gradle:1.5.4"
classpath "com.github.jengelman.gradle.plugins:shadow:1.2.4"
}
}
apply plugin: "io.ratpack.ratpack-java"
apply plugin: "com.github.johnrengelman.shadow"
apply plugin: "idea"
apply plugin: "eclipse"
mainClassName = 'app.RatpackApp'
repositories {
jcenter()
}
dependencies {
// Default SLF4J binding. Note that this is a blocking implementation.
// See here for a non blocking appender http://logging.apache.org/log4j/2.x/manual/async.html
runtime 'org.slf4j:slf4j-simple:1.7.25'
compile ratpack.dependency('thymeleaf')
compile ratpack.dependency('guice')
testCompile "org.spockframework:spock-core:1.0-groovy-2.4"
}
src / main / java / app / RatpackApp.java
package app;
import ratpack.guice.Guice;
import ratpack.server.BaseDir;
import ratpack.server.RatpackServer;
import ratpack.thymeleaf.ThymeleafModule;
import java.util.HashMap;
import static ratpack.thymeleaf.Template.thymeleafTemplate;
public final class RatpackApp {
public static void main(String[] args) throws Exception {
RatpackServer.start(server ->
server.serverConfig(config -> config.findBaseDir())
.registry(Guice.registry(bindings -> bindings.module(ThymeleafModule.class)))
.handlers(chain -> chain.get(ctx -> ctx.render(thymeleafTemplate(new HashMap<String, Object>() {{
put("title", "Hello, Ratpack!");
put("header", "Hello, Ratpack!");
put("text", "This template got rendered using Thymeleaf");
}}, "home"))))
);
}
}
src / ratpack / thymeleaf / home.html
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">
<head>
<title th:text="${title}" />
</head>
<body>
<h1 th:text="${header}"></h1>
<p th:text="${text}" />
</body>
</html>
请记住在
.ratpack
中创建一个空文件src/ratpack
,以便Ratpack可以将此位置作为文件基本目录找到。
现在,用gradle shadowJar
创建最终的JAR之后,我可以看到模板文件已正确复制:
ratpack-thymeleaf-example [master●●] % unzip -l build/libs/ratpack-thymeleaf-example-all.jar | grep home
232 06-24-2018 10:12 thymeleaf/home.html
在这里您可以找到完整的示例-https://github.com/wololock/ratpack-thymeleaf-example