Velocity ResourceNotFoundException в IntelliJ IDEA - PullRequest
0 голосов
/ 21 марта 2011

У меня есть шаблон 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'

Кто-нибудь знает, в чем может быть проблема? Стоит ли что-то менять в настройках проекта?

Заранее спасибо!

Ответы [ 4 ]

1 голос
/ 21 марта 2011

Я постоянно сталкиваюсь с этим.

Откройте Настройки-> Компилятор и добавьте «? *. Vm» в список ресурсов. Таким образом, он будет скопирован в ваши / вне каталогов. Убедитесь, что корень пути к файлам .vm помечен как источник в вашем проекте, и загрузчик классов должен его найти.

Переместить папку / generate из каталога / src; поместите его на тот же уровень, что и / src. Отметьте его как «источник» в настройках вашего модуля и попробуйте снова, начав путь доступа с «Шаблоны».

0 голосов
/ 05 июля 2017

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

это работает в веб-проекте.

0 голосов
/ 19 марта 2014

Я знаю, что его уже давно просили. Но я не мог удержаться от публикации, так как мне потребовалось много времени, чтобы выяснить, что происходит с интеллигентной идеей.

По идее intellj, скорость пытается найти файл шаблона в папке «Project» вместо пути к классу «Module». Я почти уверен, что мне может не хватить какой-то конфигурации в идее Intellij, чтобы она смотрела в путь к классам модулей. Тем не менее, если вы скопируете шаблон скорости в папку проекта идеи Intelli, все будет работать.

Согласитесь, это глупо, но до сих пор не смог придумать, как иначе сконфигурировать идею. Кто-нибудь, какие-нибудь указатели?

0 голосов
/ 22 марта 2011

Хорошо, теперь это работает после удаления всего, что связано с VelocityEngine, так что это просто что-то вроде

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

Благодаря Джейсону Дусеку .

...