无法运行Java注解处理器。

7

我在使用命令行运行我的注解处理器时遇到了问题。问题是它在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位专业版,JDK 1.7.xx),找到处理器并执行处理方法。
在我的Linux环境中(Linux Mint 13 32位 -> 基本上是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 调用了我的注释处理器(在两个平台上都可以),这也是更好的解决方案,因为可以进行调试。

编辑2: 实际命令:

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个回答

4

在Linux中,您是否使用冒号而不是分号作为类路径分隔符?请同时包含您正在执行的Linux命令。

将classpath中的分号改为冒号,就可以使其工作。

像这样:

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

除非问题实际上是使用了错误的路径分隔符。如果是这样,那么这就是答案。 - Jeff Putney
非常感谢,我一点都不知道。 - Brand88
你刚刚救了我的命。 - dieend

1
我还发现Debian Wheezy(7u3)中包含的OpenJDK 7版本根本无法使用注释处理器。我进行了OpenJDK 7u9的自定义构建(来自Ubuntu Quantal),它完美地工作。
我在Debian的错误跟踪器中报告了一个错误:http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=697658

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接