org.apache.velocity.exception.ResourceNotFoundException: 无法找到资源 'templates/email/test.vm'

org.apache.velocity.exception.ResourceNotFoundException: Unable to find resource 'templates/email/test.vm'

我的代码如下。

VelocityEngine ve = new VelocityEngine();
        ve.setProperty(RuntimeConstants.RESOURCE_LOADER, "class");
        ve.setProperty("class.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");
        ve.init();
        Template tempalte = ve.getTemplate("templates/email/test.vm");

我遇到以下错误。

org.apache.velocity.exception.ResourceNotFoundException: Unable to find resource 'templates/email/test.vm' at org.apache.velocity.runtime.resource.ResourceManagerImpl.loadResource(ResourceManagerImpl.java:452) at org.apache.velocity.runtime.resource.ResourceManagerImpl.getResource(ResourceManagerImpl.java:335) at org.apache.velocity.runtime.RuntimeInstance.getTemplate(RuntimeInstance.java:1102).....

"template" 文件夹在我的 src 文件夹中。

If I directly put the velocity template file into src folder and update as "Template tempalte = ve.getTemplate("test.vm");" it works.

我正在使用 Mac OS、Java 1.8、Eclipse Neon。

请帮我解决这个问题。

感谢和问候, IsuruJ

很少有问题可能会导致它

  1. Templates 文件夹是 velocity 的根目录,因此删除它可能有效

    ve.getTemplate("/email/test.vm");

  2. 大写的文件被 windows 忽略为:找不到文件夹电子邮件或文件 Test.vm

  3. 新权限 folder/file 如果用户不是所有者则不允许读取

尝试设置以下变量并检查它是否有效

ve.setProperty(RuntimeConstants.RESOURCE_LOADER, "class,file");
        ve.setProperty(RuntimeConstants.RUNTIME_LOG_LOGSYSTEM_CLASS, "org.apache.velocity.runtime.log.Log4JLogChute");
        ve.setProperty("runtime.log.logsystem.log4j.logger", "VELLOGGER");
        ve.setProperty("class.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");
        ve.setProperty("runtime.log.logsystem.class", "org.apache.velocity.runtime.log.NullLogSystem");

你的速度文件应该在 resources 文件夹下

以上方法我有我的项目,如果不工作试试这个

我相信你的文件夹结构像 /src/main/java/com/xyz/email/velocity/.

ve.velocityEngine.setProperty(RuntimeConstants.RESOURCE_LOADER,"classpath");
  ve.velocityEngine.setProperty("classpath.resource.loader.class",ClasspathResourceLoader.class.getName())

感谢您的宝贵时间。 这是一个 ANT 项目。我错误地无法编写脚本来将模板文件夹复制到 WEB-INF/classes 文件夹。这就是问题所在。 @user7294900 和@soorapadman 都是正确的。代码现在可以工作了。

非常抱歉给您带来不便。

此致, 伊苏鲁