【问题标题】:How to use custom annotation processor with Maven 2?如何在 Maven 2 中使用自定义注释处理器?
【发布时间】:2012-07-24 23:11:28
【问题描述】:

在我们的企业应用程序中,我们正在寻找一种从 Java 类中收集数据的动态方式。我们创建了一个带有name 属性的自定义注释接口(@98​​7654321@)。我们想从所有带注释的类中收集该属性的值。

我设法为自定义注释创建了一个AnnotationProcessorFactory 和一个AnnotationProcessor。由于我们使用的是 Maven 2,所以我在主项目的 pom.xml 的插件中添加了以下内容。

    <plugin>
      <groupId>org.codehaus.mojo</groupId>
      <artifactId>apt-maven-plugin</artifactId>
      <version>1.0-alpha-5</version>
      <configuration>
        <factory>our.company.api.component.lister.ComponentAnnotationProcessFactory</factory>
      </configuration>
    </plugin>

这位于具有多个子项目的主项目中。工厂和定制处理器位于这些子项目之一中。自定义注释分散在所有子项目中,这就是我将插件放在主项目的pom.xml 中的原因。

问题是当我发出mvn apt:process 命令时,我收到了关于没有处理器的注释的警告,我们的自定义注释也在其中。我认为这意味着插件找不到工厂类。

我应该怎么做才能让插件找到工厂和处理器文件?

编辑:

项目层次结构非常简单:

main_project
|-sub_project1
|...
|-sub_projectn

插件位于main_projectpom.xml 中。假设工厂和处理器在sub_project1,自定义注解在sub_project2sub_project3,...,sub_projectn

【问题讨论】:

  • 您的项目层次结构是什么样的?

标签: java maven-2 annotations maven-plugin annotation-processing


【解决方案1】:

要检查两件事:

  1. 确保包含您的ComponentAnnotationProcessFactorymain_project(或插件)depends on the project
  2. Apt Maven 插件的&lt;factory&gt; 配置标签对我不起作用,但如果其完全限定名称在META-INF/services/com.sun.mirror.apt.AnnotationProcessorFactory 文件中,插件会找到工厂类。 (见documentation of apt for the details。)

更好的方法是使用annotation processing features of JDK 6(而不是Maven Apt 插件),因为它不需要JDK 的lib 文件夹中的com.sun 包和tools.jar

<build>
    <plugins>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.5.1</version>

            <configuration>
                <source>1.6</source>
                <target>1.6</target>

                <annotationProcessors>
                    <annotationProcessor>
                        com.example.annotationprocessor.Processor
                    </annotationProcessor>
                </annotationProcessors>
            </configuration>
        </plugin>
    </plugins>
</build>

更多参考资料:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-27
    • 1970-01-01
    相关资源
    最近更新 更多