无法运行java注释处理器

时间:2012-12-16 01:35:19

标签: java annotations javac processor

我遇到了从命令行运行我的注释处理器的麻烦。 问题是它适用于Windows环境,但不适用于我的Linux安装。

我的处理器位于jar文件(meta-validator.jar)中。我还添加了META-INF / services / javax.annotation.processing.Processor的条目,其中包含我的处理器类的完全限定名称。

我试图用这个命令调用注释处理器:

javac -cp "./metadata-validator.jar; ... (path to annotations.jar etc.)" -processor xammt.validator.modules.ValidatorModule -proc:only " ... path to sources" 

在Windows环境中它可以正常工作(Windows 7 64位Pro,JDK 1.7.xx),找到处理器并执行处理方法。

在我的linux环境中(Linux Mint 13 32bit - >基本上是Ubuntu 12.04,Oracle JDK 1.7)我收到消息:

error: Annotation processor 'xammt.validator.modules.ValidatorModule' not found
warning: Annotation processing without compilation requested but no processors were found.

同样没有-processor开关我得到相同的警告(带有其他详细的东西)。

可能导致此问题的原因是什么?我想我的linux机器上的JDK安装正确,因为我能够毫无问题地运行/编译java应用程序。

感谢您的任何建议。

编辑:我仍然不知道为什么这不起作用。有趣的是,它以编程方式工作 - 我设法通过Java编译器API调用我的注释处理器没有问题(在两个平台上),这也是因为调试更好的解决方案。

EDIT2: 实际命令:

javac -cp "./metadata-validator.jar;./lib/common-library.jar;./Annotation source.jar" 
-processor xammt.validator.modules.ValidatorModule -proc:only "SourceFile.java"

解决: 检查http://en.wikipedia.org/wiki/Classpath_(Java)#OS_specific_notes

2 个答案:

答案 0 :(得分:4)

在Linux上,您使用冒号而不是分号作为类路径分隔符吗?包括您正在执行的Linux命令。

将分号更改为类路径中的冒号,它应该有效。

像这样:

javac -cp "./metadata-validator.jar:./lib/common-library.jar:./Annotation source.jar" -processor xammt.validator.modules.ValidatorModule -proc:only "SourceFile.java"

答案 1 :(得分:1)

我还发现Debian Wheezy(7u3)中包含的OpenJDK 7版本根本不适用于注释处理器。我做了一个OpenJDK 7u9的定制版本(来自Ubuntu Quantal),它运行得很好。

我在Debian的bugtracker中报告了一个错误:http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=697658