1

私はこれまでに幅広く検索し、問題を解決するのに役立つものは何も見つかりませんでした。私は特定の機能を実装しようとしていると私はのPoCソリューションを作成しています、ここでの問題は、しかしです:Aspectjを使用して、1つのプロジェクトでコンパイル時の織りとJavaコンパイル時のアノテーション処理を実行する

それは時間がAspectJのを織り込みコンパイル時間の注釈プロセッサに

をコンパイル両方使用することを含むと私は考えていますそれらの両方の作業を同時に行う方法。

これまでは、aspectj-maven-pluginで* .ajファイルのAspectJアスペクトを使用していましたが、うまくいきました。 maven-compiler-pluginでアノテーション処理を追加しようとするとすぐに問題が起こりました:aspectj-maven-pluginによってコンパイル段階で生成されたターゲットディレクトリ内のweaveクラスがmaven-compiler-pluginによって上書きされましたそれがコンパイル段階で生成されたクラスによって生成されます。

[INFO] --- aspectj-maven-plugin:1.10:compile (default) @ demo --- 
[INFO] Showing AJC message detail for messages of types: [error, warning, fail] 
...and a list of all the Join Points and Intertypes done 

しかし、その後のmaven-コンパイラプラグインが動作するようになり、すべてを再コンパイル(およびクラスを生成します。

コンソール出力は、第1 AspectJの-のmaven-pluginのはそれが仕事だし、すべてのクラスを編むことを言います)注釈プロセッサを有する:ここ

[INFO] --- maven-compiler-plugin:3.7.0:compile (default-compile) @ demo --- 
[INFO] Changes detected - recompiling the module! 
[INFO] Compiling 1 source file to dir\demo\target\classes 
[INFO] 
[INFO] --- maven-compiler-plugin:3.7.0:compile (compile-project) @ demo --- 
[INFO] Changes detected - recompiling the module! 
[INFO] Compiling 19 source files to dir\demo\target\classes 

はのpom.xmlの要部である:

別にアスペクトと注釈プロセッサの両方が問題なく動作するので、問題は発生していないと考えます。

私はプラグインの実行/フェーズで何かを混乱させているのでしょうか、それとも両方を使用する必要はないかもしれません。おそらくは適切に構成されていれば十分でしょうが、コンパイルとajcをどのように組み合わせてアノテーション・プロセッサを実行するのかは考えられません(そして、2つのフェーズではまず、アノテーション・プロセッサ自体をコンパイルしてからアノテーション処理を行うprocなし)。助けてください!

答えて

0

私にとっては、これまでのところ、AspectJコンパイラを使用するときにJavaコンパイラを完全に無効にし、AspectJコンパイラで注釈の処理とコンパイルのみを行うようにしました。たとえば、Mavenのビルド構成は次のようになります。

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <configuration> 
       <skipMain>true</skipMain> 
       <skip>true</skip> 
      </configuration> 
     </plugin> 
     <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>aspectj-maven-plugin</artifactId> 
     </plugin> 
    </plugins> 
</build> 

それが何らかの理由であなたのために動作しない場合は、あなただけの注釈処理用のJavaコンパイラを使用して試してみて、AspectJのコンパイラは残りをやらせることができます。

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <configuration> 
       <proc>only</proc> 
      </configuration> 
     </plugin> 
     <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>aspectj-maven-plugin</artifactId> 
      <configuration> 
       <proc>none</proc> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 

私はまた、あなたのビルドファイルで定義されてあまりにも多くの実行(Javaコンパイラのための2:+ compile-projectdefault-compile)を持って見デフォルト以外の実行IDと、。特定の理由がある場合を除いて、デフォルトの実行のみをデフォルトのIDで残すことをお勧めします。

関連する問題