IntelliJ IDEA中未找到Velocity资源异常

ut6juiuv  于 2022-11-21  发布在  IntelliJ IDEA
关注(0)|答案(4)|浏览(536)

我有一个Velocity模板ValueTmpl.vm,Velocity资源管理器无法找到它。

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);
    }
}

generate文件夹位于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'

有人知道问题可能是什么吗?我应该在项目设置中更改一些内容吗?
提前感谢!

rur96b6h

rur96b6h1#

我经常碰到这种事。
打开Settings-〉Compiler并将“?*.vm”添加到资源列表中。这样它就会被复制到你的/out目录中。确保.vm文件的根路径在你的项目中被标记为source,并且类加载器应该能找到它。
将/generate文件夹从/src下移出;把它放在和/src相同的级别上。2在你的模块设置中把它标记为“source”,然后通过从“templates”开始访问路径重试。

pcww981p

pcww981p2#

现在,在删除与VelocityEngine相关的所有内容后,它就可以正常工作了,就像这样

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

多亏了Jason Dusek

xtfmy6hx

xtfmy6hx3#

我知道很久以前就有人问过我了,但我无法阻止自己发帖,因为我花了很长时间才弄清楚智能想法到底发生了什么。
使用intellj idea,velocity试图在“Project”文件夹中找到模板文件,而不是“Module”类路径。我很确定我可能缺少intellj idea中的一些配置,使其查找模块类路径。尽管如此,如果您将velocity模板复制到intelli idea项目文件夹中,一切都将正常工作。
同意这是一个愚蠢的事情,但到目前为止还没有找到一种方法来配置intelij的想法,否则。任何人,任何指针?

cyvaqqii

cyvaqqii4#

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");

这在web项目中起作用。

相关问题