将速度配置为注释对 Eclipse 的处理器依赖

Posted

技术标签:

【中文标题】将速度配置为注释对 Eclipse 的处理器依赖【英文标题】:configure velocity as annotations' processor dependency on eclipse 【发布时间】:2016-08-17 23:45:28 【问题描述】:

我尝试按照this 使用注释和 Velocity 模板引擎生成 java 代码的教程。 (我使用的是 eclipse ee mars。)

在带注释的项目上,启用了注释处理,并且处理器(作为导出的 jar)包含在工厂路径中。处理器具有 velocityvelocity-tools 的依赖项,所以我也将它们包含在工厂路径中(使用velocity-dep,其中包含所有速度的依赖项)。

问题是:当我包含 velocity-dep-1.4.jar 时,一切正常并且生成代码,但是当我切换到 任何其他版本(1.5 或 1.7)我收到错误 The specified class for ResourceManager (org.apache.velocity.runtime.resource.ResourceManagerImpl) does not implement org.apache.velocity.runtime.resource.ResourceManager; Velocity is not initialized correctly. 在错误日志上。 我需要使用velocity 1.7 来继续我的项目。

在三台不同的电脑上尝试相同的东西,结果相同。

我的想法已经用完了,任何帮助将不胜感激。


Update1(添加了在 Eclipse 中重现的步骤):

生成处理器的jar:

克隆这个 github 存储库: https://github.com/halx4/question.***.velocity-template-engine-configuration-on-eclipse/tree/master 它包含 2 个 eclipse 项目、一个处理器和一个带注释的项目(客户端)。我已经包含了所有依赖项并将它们设为非 Maven 项目,只是为了确保问题与 Maven 无关。

确保:

processor project properties > java compiler > annotations processing > enable project specific settings 已启用 processor project properties > java compiler > annotations processing > enable annotation processing 已启用 processor project properties > java compiler > annotations processing > enable processing in Editor 已启用 processor project properties > java compiler > annotations processing > Factory Path > Enable project specific settings 已启用 processor project properties > java compiler > annotations processing > Factory Path > metainf-services-1.1.jar 已作为包含 JAR 的注释处理器启用。 现在应该可以将处理器导出为(不可执行的)JAR。确保 beaninfo.vmvelocity.properties 文件已包含在导出的 JAR 中。通过在JAR export 菜单上选择Export all output folders fro checked projects,确保文件META-INF/services/javax.annotation.processing.Processor 也包含在JAR 中。 导出的 jar 可以放在 NoMavenClient 项目的文件夹中。为方便起见,处理器的 JAR(theProcessor.jar) 已放置在此文件夹中。

应用注释处理:

打开 Eclipse 错误日志 (window > show > error log) 以查看来自处理器的消息 确保: client project properties > java compiler > annotations processing > enable project specific settings 已启用 client project properties > java compiler > annotations processing > enable annotation processing 已启用 client project properties > java compiler > annotations processing > enable processing in Editor 已启用 client project properties > java compiler > annotations processing > Factory Path > Enable project specific settings 已启用 client project properties > java compiler > annotations processing > Factory Path > theProcessor.jar , velocity-tools-2.0.jar ,velocity-1.7-dep.jar 已启用为包含 JAR 的注释处理器。

在这个阶段,点击 Apply 将调用处理器。在错误日志视图中,我看到“ResourceManager 的指定类...”错误消息。 *但是如果我在工厂路径中包含文件theProcessor.jar , velocity-tools-2.0.jar ,velocity-dep-1.4.jar 并点击应用,我会收到错误日志“正在创建源文件...”,这意味着成功。

查看图片以获得更好的理解:configurations


更新2

继续我对该主题的调查,我试图在 intelliJ IDEA 中重现该问题,但我根本做不到。速度 1.4 或 1.7 一切正常,代码文件按预期生成。 eclipse 和 IDEA 的配置过程之间的一个重要(可能)区别是应该声明注释处理器的依赖关系的地方。 在 IDEA 上,处理器的依赖被声明为普通模块的(与 eclipse 相同的)依赖 但是在 Eclipse 上,如果它们在构建路径中被声明为简单的项目依赖项,则处理器不可见。相反,它们应该在 Factory Path 中声明,这与声明注释处理器的位置相同。 尽管如此,这个问题并没有被认为是答案,因为我最好在 Eclipse 中找到解决方案,而不是在一个新的 IDE 中开发整个项目。 另外,通过 maven 配置注释处理似乎会导致两个 IDE 之间的行为不同。在上述教程的页面上,作者已经上传(见他的 cmets)一个 git repo,其中包含 maven 项目,展示了他所讨论的内容。在 IDEA 上克隆这个 repo 并编译,使得注释处理工作无需触摸任何设置,因为所有设置都是用 maven 配置的。我什至不必将处理器包装在罐子里..! Eclipse 没有进行任何开箱即用的注释处理。 (我确实安装了 m2e-apt;只是为了澄清)

如果有人尝试了我试图解释的任何程序,但结果不同,请告诉我。


尽管如此,这个问题并没有被认为是答案,因为我最好在 eclipse 中找到解决方案,而不是在一个新的 IDE 中开发整个项目。

【问题讨论】:

【参考方案1】:

我不是 Eclipse 用户。但是当我看到这条消息时:

The specified class for ResourceManager(org.apache.velocity.runtime.resource.ResourceManagerImpl) does not implement org.apache.velocity.runtime.resource.ResourceManager; Velocity is not initialized correctly.

我立即想到版本不匹配。当你切换到 1.5 或 1.7 时,某处必须仍然有一些 1.4 的类或 jar 文件。

请确保在升级时清理整个项目并删除任何 1.4 依赖项。

【讨论】:

根据谷歌的说法,这是其他人遇到相应问题的常见原因,这就是我首先对项目进行去maven化的原因。即使是版本不匹配,我仍然找不到修复它或缩小问题范围的方法。还尝试清洁整个工作区,但仍然没有运气。

以上是关于将速度配置为注释对 Eclipse 的处理器依赖的主要内容,如果未能解决你的问题,请参考以下文章

在 Eclipse 中调试注释处理器

eclipse中maven依赖的jar源码中文注释乱码解决

eclipse中maven依赖的jar源码中文注释乱码解决

如何在 IntelliJ IDEA 14 中为当前项目工作配置注释处理?

设置pycharm为Eclipse快捷键

十台服务器集群架构图