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

时间:2016-04-24 16:52:17

标签: java eclipse annotations velocity annotation-processing

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

在带注释的项目中,启用注释处理,并且处理器(作为导出的jar)包含在Factory Path中。处理器具有velocityvelocity-tools的依赖关系,因此我也将它们包含在Factory路径中(使用包含所有速度依赖关系的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. 在错误日志上。 我需要利用速度1.7来继续我的项目。

在三台不同的电脑上尝试过同样的结果。

我已经没有想法,任何帮助都会非常感激。

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

生成处理器的jar:

  • 克隆这个github repo: https://github.com/halx4/question.StackOverflow.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。确保导出的JAR中包含beaninfo.vmvelocity.properties个文件。另外,通过在META-INF/services/javax.annotation.processing.Processor菜单上选择Export all output folders fro checked projects,确保文件JAR export也已包含在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

UPDATE2

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

如果有人尝试我尝试解释的任何程序,并且会有不同的结果,请告诉我。

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

1 个答案:

答案 0 :(得分:0)

我不是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 ou 1.7时,某处仍然有一些1.4类或jar文件。

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