2016-08-12 52 views
3

注釈処理が初めてで、Mavenで自動化しようとしています。私は自分のpom.xmlでこれを入れている:Maven注釈処理プロセッサが見つかりません

<plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>3.0</version> 
      <configuration> 
       <annotationProcessors> 
        <annotationProcessor> 
         co.aurasphere.revolver.annotation.processor.InjectAnnotationProcessor</annotationProcessor> 
        <annotationProcessor> 
         co.aurasphere.revolver.annotation.processor.RevolverContextAnnotationProcessor</annotationProcessor> 
       </annotationProcessors> 
       <source>1.7</source> 
       <target>1.7</target> 
      </configuration> 
     </plugin> 
    </plugins> 

問題は、私はMavenのは、プロセッサを見つけることができないので、私はCompilationFailureExceptionを取得するプロジェクトをビルドしようとするということです。

このような他の質問が見つかったので、プラグインの外に依存関係を置くことで解決しました。私はそれを試みたが、何も私のために変わった。

何か不足していますか?

ありがとうございます。ここで

EDIT

は、プロセッサと注釈の両方が含まれている別のプロジェクトで私の依存関係です:

<dependencies> 
    <dependency> 
     <groupId>co.aurasphere</groupId> 
     <artifactId>revolver-annotation-processor</artifactId> 
     <version>0.0.3-SNAPSHOT</version> 
    </dependency> 
</dependencies> 

EDIT 2

さらに調査した後、私がすることを決めましたプロセッサJAR(Mavenで構築)を逆コンパイルすると、それが起こります...私のクラスは存在しません。何らかの理由で、MavenがクラスをJARにコンパイルしていないため、クラスが見つからないのです。私はそのビルドで何が間違っているのかを試してみました(以前これは私に起こったことはなく、私はしばらくMavenを使っていました...)。

まず、そのプロジェクトのパッケージはjarです。 クラスはすべてsrc/main/javaの下にあります。 pom.xmlで、クラスパスとソースパスが同じであることを確認しました。ここで

は、プロセッサのポンポンです:達人の

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
<modelVersion>4.0.0</modelVersion> 
<groupId>co.aurasphere</groupId> 
<artifactId>revolver-annotation-processor</artifactId> 
<version>0.0.3-SNAPSHOT</version> 
<build> 
    <plugins> 
     <plugin> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>3.1</version> 
      <configuration> 
       <source>1.7</source> 
       <target>1.7</target> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 
<dependencies> 
    <!-- https://mvnrepository.com/artifact/javax.inject/javax.inject --> 
    <dependency> 
     <groupId>javax.inject</groupId> 
     <artifactId>javax.inject</artifactId> 
     <version>1</version> 
    </dependency> 

    <!-- https://mvnrepository.com/artifact/org.apache.velocity/velocity --> 
    <dependency> 
     <groupId>org.apache.velocity</groupId> 
     <artifactId>velocity</artifactId> 
     <version>1.7</version> 
    </dependency> 


</dependencies> 

EDIT 3

Hereの出力は、きれいなプロセッサプロジェクトにインストールします。残念ながらアウトプットが長すぎて、それが良くないと分かっていても外部リンクを投稿しなければなりませんでした。 EclipseFile System:ここでは4

EDITは、私の依存関係の階層のいくつかのスクリーンショットです。

プロジェクトはもともとはEclipseの単純なJavaプロジェクトとして作成されてからMavenに変換されていたので、新しいMavenプロジェクトを作成して、問題をEclipseプラグイン何かを混乱させたが、エラーはまだそこにあった。

+3

依存関係をどのように定義したのかを 'co.aurasphere.revolver ...'パッケージに投稿してください。彼らは**あなたがコンパイルしようとしているプロジェクトの中にはありません**、そうですか? – ppeterka

+2

注釈プロセッサ*を使用するプロジェクトを構築する前に注釈プロセッサ*を構築する必要があります。 – chrylis

+0

注釈とプロセッサーはOPのようにインポートされた別のプロジェクトにあります(私はそれを編集しました)。私は以前にそのプロセスを構築していました。私はプロジェクトとしてeclipseのMaven Dependenciesの下でインポートを見ます(jar、IDKではなく...)。プロセッサプロジェクトは jar Aurasphere

答えて

3

私は自分自身で答えを見つけました。私は、問題が、注釈プロセッサのクラスの設定で、META-INF/services /のjavax.annotation.processing.Processorファイルであることを理解しました。問題を解決するために、私は私のプロセッサプロジェクトののpom.xml構成に以下を追加する必要がありました:

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>3.5.1</version> 
      <configuration> 
       <compilerArgument> 
        -proc:none 
       </compilerArgument> 
       <source>1.7</source> 
       <target>1.7</target> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 

このMavenのは、実際の瓶にクラスを構築し、問題を修正しましょう。これはバグかどうかわかりませんが、確かに私には奇妙に見えます。みんな助けてくれてありがとう!

1

最も簡単な方法は、リボルバーアノテーションプロセッサのアーティファクトのMETA-INF/servicesディレクトリにアノテーションプロセッサを登録することです。 Mavenコンパイラの設定は必要ありません。

既に登録されているかどうかを確認し、そうでない場合は、ソースコードを管理している場合は、自分で登録してください。

https://docs.oracle.com/javase/8/docs/api/java/util/ServiceLoader.html

あなたがソースコードをコントロールしている場合、私はまた、注釈と同じアーティファクトにプロセッサをパッケージ化することをお勧めします。このように、アノテーションの1つを使用しているときはいつでも、アノテーションプロセッサもコンパイラによって取得されます。

+0

実際に私はあなたがこれを行うことができることを知っていますが、私はプロジェクトにMavenを使用しているので、javacやEclipseを使って実際にビルドしていないので、これをMavenビルド – Aurasphere

+1

Ähmと統合したいと考えています。Maven Compiler Pluginはjavac ...私が記述した方法は、プロセッサが自動的に起動されるので、追加設定なしでMavenがすぐに使えるようになっています。 – Puce

関連する問題