gpt4 book ai didi

java - 从嵌套 JAR 加载 Velocity 模板

转载 作者:太空宇宙 更新时间:2023-11-04 06:49:22 25 4
gpt4 key购买 nike

我有一个应用程序打包在 onejar 中,它使用 Velocity 进行模板化。

在我的 Maven 项目设置中,我在 $base/src/main/resources/template.html 中有一个文件。当应用程序打包为 onejar 时,生成的 onejar 内部包含一个嵌套的 jar(在 main/my-jar.jar 下)。该 jar 又将 template.html 文件打包在其根目录下。 (显然maven将其从src/main/resources复制到包的根目录中)

我想将该模板作为 Velocity 中的资源加载。我读过我需要使用 ClassPathResourceLoader 来做到这一点,所以我的代码如下所示:

    VelocityEngine ve = new VelocityEngine();
ve.setApplicationAttribute("resource.loader", "class");

ve.setApplicationAttribute("class.resource.loader.class",
org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader.class);

ve.init();
Template t = ve.getTemplate("template.html");

每次都会失败,但 Velocity 的资源加载器都无法找到该文件。

我有两个问题 - 首先,这是否是配置 ClasspathResourceLoader 的正确方法?其次,如果配置正确,我将指定什么路径以便可以在内部嵌套 jar 中找到 template.html?

最佳答案

经过大量挖掘后,我终于找到了答案。

使用ClasspathResourceLoader的代码如下:

VelocityEngine ve = new VelocityEngine();

ve.setProperty(RuntimeConstants.RESOURCE_LOADER, "classpath");
ve.setProperty("classpath.resource.loader.class", ClasspathResourceLoader.class.getName());

ve.init();

其次,很多人告诉我,在嵌套 jar 内,标准类路径加载器甚至不应该找到 template.html 文件。有人告诉我需要一些奇特的第三方类加载器。 OneJar 提供了这样一个奇特的加载器。一旦我获得了正确使用 ClasspathResourceLoader 的代码,事情似乎就解决了。

要记住的是“/”是相对于类路径根的。因此,当 $base/src/main/resources/template.html 在解压 JAR 的根目录中重新打包为 template.html 时,这意味着 /template.html 是要加载的正确资源路径。

该路径 /template.html 当然是相对于嵌套的内部 JAR 的。我不知道类加载器(无论是标准加载器还是 OneJar)如何不会混淆外部 jar 和内部 jar 的 /

关于java - 从嵌套 JAR 加载 Velocity 模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23551301/

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