java - 如何在 Maven 2 中使用自定义注释处理器?

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

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

我设法为自定义注释创建了一个 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_project2, sub_project3, ..., sub_projectn

最佳答案

要检查两件事:

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

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

<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>

进一步引用:

关于java - 如何在 Maven 2 中使用自定义注释处理器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11668055/

相关文章:

java - JTextPane 不显示 JScrollPane 并且不换行文本

java - 在 hibernate 中有效地从数据库加载集合的集合

maven-2 - 清除构建机器上的 Maven 本地存储库

java - Eclipse(带有 J2EE 插件)不会将类文件构建到输出目录

java - 是否可以强制 Java 注释的值?

java - HttpRequestHandlingMessagingGateway JSON 数组有效负载

Java公共(public)变量多个类

Maven - 如果属性为空/空则跳过插件

javascript - 他们有任何 JavaScript 注释库吗?

java - 如果我只想使用注释进行开发,我是否需要 *********ApplicationContext 类?