簡體   English   中英

IntelliJ IDEA中的Velocity ResourceNotFoundException

[英]Velocity ResourceNotFoundException in IntelliJ IDEA

我有一個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);
    }
}

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'

有人知道問題可能在哪里嗎? 我應該在項目設置中更改某些內容嗎?

提前致謝!

我一直都遇到這個問題。

打開設置->編譯器,然后在資源列表中添加“?*。vm”。 這樣,它將被復制到您的/ out目錄中。 確保.vm文件路徑的根在您的項目中被標記為源,並且類加載器應找到它。

將/ generate文件夾從/ src下移出; 將其放在與/ src相同的級別。 在模塊設置中將其標記為“源”,然后通過在“模板”處啟動訪問路徑來重試。

我知道它早就被問到了。 但是無法阻止自己發布,因為花了我相當長的時間才弄清楚intellij的想法是怎么回事。

用intellj的想法,Velocity正在嘗試在“ Project”文件夾中而不是“ Module”類路徑中找到模板文件。 我很確定我可能在intellij的想法上缺少一些配置,以使其進入模塊類路徑。 但是,如果您將速度模板復制到智能創意項目文件夾中,則一切正常。

同意那是一件愚蠢的事情,但是到目前為止,還沒有找到一種否則配置intelij想法的方法。 任何人,任何指針?

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項目。

好的,在刪除與VelocityEngine相關的所有內容后,它現在可以工作,所以就像

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

感謝Jason Dusek

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM