7

私たちのエンタープライズ アプリケーションでは、Java クラスからデータを動的に収集する方法を探しています。プロパティを持つカスタム アノテーション インターフェイス ( @interface)を作成しましたname。すべての注釈付きクラスからこのプロパティの値を収集したいと考えています。

カスタム アノテーションのAnnotationProcessorFactoryとを作成できました。AnnotationProcessorMaven 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>

これは、いくつかのサブプロジェクトを持つメイン プロジェクトにあります。ファクトリとカスタム プロセッサは、これらのサブプロジェクトの 1 つにあります。カスタム注釈はすべてのサブプロジェクトに散在しているため、プラグインをpom.xmlメイン プロジェクトに配置しました。

問題は、mvn apt:processコマンドを発行すると、プロセッサのない注釈に関する警告が表示され、カスタム注釈がその中に含まれていることです。これは、プラグインがファクトリ クラスを見つけられないことを意味すると思います。

プラグインがファクトリ ファイルとプロセッサ ファイルを検出できるようにするにはどうすればよいですか?

編集:

プロジェクト階層は非常に単純です。

main_project
|-sub_project1
|...
|-sub_projectn

プラグインは の にpom.xmlありmain_projectます。ファクトリとプロセッサがsub_project1あり、カスタム アノテーションがsub_project2, sub_project3, ..., にあると仮定してください。sub_projectn

4

1 に答える 1

6

2 つの確認事項:

  1. main_project(またはプラグイン)が、を含むプロジェクトに依存していることを確認してくださいComponentAnnotationProcessFactory
  2. Apt Maven プラグインの<factory>構成タグは機能しませんでしたが、完全修飾名がMETA-INF/services/com.sun.mirror.apt.AnnotationProcessorFactoryファイルに含まれている場合、プラグインはファクトリ クラスを見つけます。(詳細は apt のドキュメントを参照してください。)

JDK 6 の注釈処理機能を(Maven Apt Plugin の代わりに)使用することをお勧めします。これは、com.sunパッケージとJDKtools.jarlibフォルダーを必要としないためです。

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

さらなる参考文献:

于 2012-07-26T12:46:53.490 に答える