gpt4 book ai didi

gradle - Ratpack + Thymeleaf + shadowJar-解决模板 “home”时出错,模板可能不存在或无法访问

转载 作者:行者123 更新时间:2023-12-03 03:58:39 29 4
gpt4 key购买 nike

我正在使用ratpack.io网络应用程序,并使用gradle作为构建工具。模板是从src/main/thymeleaf目录中的模板文件呈现的,该目录在运行时运行良好(仅使用gradle run即可)。

$ ls ./src/main/thymeleaf
home.html

在创建不包含模板文件的uber jar时遇到问题。当我打开输出jar文件时,我看到 thymeleaf目录为空。

我知道影子jar进程的一部分是将所有依赖项合并到一个jar中,但是我不确定我需要做的还包括模板文件。我尝试创建包含html文件的特殊规则,但是最终我在 jar 中只得到了html文件,而从thymeleaf目录中什至没有。
  • 我需要配置什么才能获得此uber jar中包含的模板文件?
  • 如果我实际上获得了jar模板目录中包含的文件,我是否需要更新模板解析器以从jar与当前工作目录中提取文件?
  • 最佳答案

    您是否有任何理由将模板文件保留在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>

    Remember to create an empty file .ratpack in src/ratpack so Ratpack can discover this location as a files base dir.



    现在,使用 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

    关于gradle - Ratpack + Thymeleaf + shadowJar-解决模板 “home”时出错,模板可能不存在或无法访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51006738/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com