2011-03-21 216 views
0

我有一个Velocity模板ValueTmpl.vm这是Velocity ResourceManager找不到的。一个最小的例子:IntelliJ IDEA Velocity ResourceNotFoundException

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' 

有人知道问题是什么吗?我应该改变项目设置中的东西吗?

在此先感谢!

回答

1

我一直在遇到这种情况。

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

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

+0

谢谢你的回答,duffymo。我已经在编译器设置的资源列表中添加了“?*。vm”,如果我理解您正确,我将** src/generate/templates **文件夹标记为**项目结构 - >模块 - 来源**。但是这并没有改变任何东西,可能我做错了什么? – sasasamamama 2011-03-21 12:10:49

+0

它不会改变任何东西,无论我如何通过**生成/模板/ ValueTmpl.vm **,或通过* src/generate/templates/ValueTmpl.vm **认可.vm文件 - * ValueTmpl.vm ** – sasasamamama 2011-03-21 12:12:57

0

好了,现在它移除相关VelocityEngine后一切工作,所以它只是像

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

感谢Jason Dusek

0

我知道它被问了很久。但无法阻止自己发布,因为我花了很长时间才弄清楚intellij的主意。

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

同意这是一个愚蠢的事情,但到目前为止无法找到一种方法来配置intelij的想法,否则。任何人,任何指针?

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

这部作品在Web项目。