1

我有一个 Velocity 模板ValueTmpl.vm,它无法被 Velocity ResourceManager 找到。一个最小的例子:

package generate;

import java.io.File;
import java.io.FileWriter;
import java.io.Writer;
import org.apache.velocity.app.Velocity;
import org.apache.velocity.app.VelocityEngine;
import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;

public class Generate {
    public static void main(String[] args) throws Exception {
        VelocityContext context = new VelocityContext();
        context.put("key", "value");
        Writer writer = new FileWriter(new File("Result.java"));
        createTemplate("generate/templates/ValueTmpl.vm").merge(context, writer);
        writer.close();
    }

    private static Template createTemplate(String vmTemplateFile) {
        VelocityEngine ve = new VelocityEngine();
        ve.setProperty(Velocity.RESOURCE_LOADER, "class");
        ve.setProperty("class.resource.loader.class",
                "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");
        ve.init();
        return ve.getTemplate(vmTemplateFile);
    }
}

生成文件夹位于src目录的根目录中。我收到以下错误:

21.03.2011 13:09:01 org.apache.velocity.runtime.log.JdkLogChute log
SEVERE: ResourceManager : unable to find resource 'generate/templates/ValueTmpl.vm' in any resource loader.
Exception in thread "main" org.apache.velocity.exception.ResourceNotFoundException: Unable to find resource 'generate/templates/ValueTmpl.vm'

有人知道问题可能是什么吗?我应该更改项目设置中的某些内容吗?

提前致谢!

4

4 回答 4

1

我一直遇到这个。

打开 Settings->Compiler 并将“?*.vm”添加到资源列表中。这样,它将被复制到您的 /out 目录中。确保 .vm 文件路径的根在您的项目中被标记为源,并且类加载器应该找到它。

将 /generate 文件夹从 /src 下移出;把它放在与/src 相同的级别。在模块设置中将其标记为“源”,然后通过在“模板”处启动访问路径再次尝试。

于 2011-03-21T11:29:39.563 回答
0

好的,现在它在删除与 VelocityEngine 相关的所有内容后工作,所以它就像

Template t0 = Velocity.getTemplate("src/generate/templates/ValueTmpl.vm");
t0.merge(context, writer);

谢杰森杜塞克

于 2011-03-22T06:59:06.733 回答
0

我知道很久以前就有人问过它。但是我无法阻止自己发帖,因为我花了很长时间才弄清楚 intellij 想法到底发生了什么。

使用 intellj 的想法,velocity 试图在“Project”文件夹而不是“Module”类路径中找到模板文件。我很确定我可能在 intellij idea 中缺少一些配置以使其查看模块类路径。不过,如果您将速度模板复制到 intelli idea 项目文件夹,一切都会正常工作。

同意这是一件愚蠢的事情,但到目前为止还没有找到配置 intelij idea 的方法。任何人,任何指针?

于 2014-03-19T08:31:44.833 回答
0

https://stackoverflow.com/a/38812523/8113460

我把我的 .vm 放在下面src/main/resources/templates,然后代码是:

Properties p = new Properties();
p.setProperty("resource.loader", "class");
p.setProperty("class.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");
Velocity.init( p );       
VelocityContext context = new VelocityContext();           
Template template = Velocity.getTemplate("templates/my.vm");

这适用于网络项目。

于 2017-07-05T11:46:49.240 回答