Maven编译过程未考虑生成的代码

3

我有一个Maven项目,它在编译过程中通过注解处理器生成一个新的类。该类已成功生成在/target/generated-sources/annotations/目录下,但未编译进.jar文件中。为什么会这样呢?

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>2.3.2</version>
    <configuration>
        <source>${project.build.source}</source>
        <target>${project.build.target}</target>
        <encoding>${project.build.sourceEncoding}</encoding>
        <compilerArgument>-Xlint</compilerArgument>
        <annotationProcessors>
                <annotationProcessor>net.preprocessing.MyAnnotationProcessor</annotationProcessor>
        </annotationProcessors>
    </configuration>
</plugin>

编辑

这似乎是一个已知的bug。如果有任何可行的解决方法,欢迎提供。

编辑 2

我昨天进行了一些测试,但票证中建议的解决方法并不起作用。我提供了一个测试案例。如果有人了解如何解决这个问题,欢迎提供意见。请记住,我对注释处理是新手,可能会漏掉一些明显的东西。

2个回答

6
我建议使用 maven-processor-plugin 代替将 'annotationProcessor' 参数传递给 maven 编译器的方法。根据我所读的,使用 compilerArguments 存在一些问题,而这些问题可以通过使用 maven-processor-plugin 来解决。
在此处您可以找到有关 maven-processor-plugin 的更多信息:http://maven-annotation-plugin.googlecode.com/svn/docs/usage.html 以下是处理器插件替换编译器参数的示例(该示例使用 Hibernate Metamodel Generator,但对于所有类型的注释处理器来说,这看起来都差不多):http://relation.to/Bloggers/HibernateStaticMetamodelGeneratorAnnotationProcessor

Hibernate的示例/解决方法做到了这一点。我只需要将目录更新为我的生成源代码即可。非常感谢!!! - Jérôme Verstrynge

1

一个JAR文件是作为过程的一部分构建的,但它不包含生成的代码。 - Jérôme Verstrynge
那么请查看这个线程:http://stackoverflow.com/questions/4741220/maven-producing-empty-jar - Ali
你能分享一下你的项目结构/树吗?Maven项目结构应该是标准的,所以不应该有问题。 - Ali
你用了哪个插件来生成这些类?你能给一个例子看看吗?此外,解决问题的方法在 JIRE 票据描述中已经给出(build-helper-plugin)。 - khmarbaise
@khmarbaise 请参考http://download.oracle.com/javase/6/docs/technotes/tools/solaris/javac.html#processing,您不需要使用插件来生成类,处理器会自动完成。我已经尝试了解决方法,但是它并没有起作用。我在工单中放置了我的发现和测试案例。 - Jérôme Verstrynge
显示剩余2条评论

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