2011-03-21 189 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項目。