サービス構成ファイルが間違っているか、コンストラクター オブジェクト javax.annotation.processing.Processor : Provider com.example.MyProcessor が見つかりません
このエラーが発生した場合は、クラスやファイルの生成などのコンパイル時の作業を行っている必要があります。ただ、やはりBaiduなので書き方に問題がないのか、たまに2回成功することもあります。オンラインの解決策には autoService などを追加するよう記載されていますが、ほとんどの解決策ではこのエラーが報告される理由が説明されていません。
まず、コンパイル時に、javac はすべての jar パッケージおよびプロジェクト (モジュール) のファイル resource/META-INF/services/javax.annotation.processing.Processor に設定されているクラス情報を検索します。これはクラス情報であることを覚えておいてください。このクラスはクラスローダを介してロードされますが、このときプロジェクト(モジュール)内のファイルはコンパイル期間中であり、クラスファイルが生成されていないため、当然対応するクラスは見つかりません。次のように、
方法 1: javax.annotation.processing.Processor ファイルを削除し、コンパイルの完了後にそのファイルを対応するディレクトリにコピーします (ただし、コンパイルのたびにコピーする必要があります)。
方法 2: javax.annotation.processing.Processor ファイルを削除し、このファイルをコンパイルする必要があるプロジェクト (モジュール) に追加します (推奨、依存関係なし) 。
方法 3: Google の autoService アノテーションを使用する (推奨)
<!-- https://mvnrepository.com/artifact/com.google.auto.service/auto-service -->
<dependency>
<groupId>com.google.auto.service</groupId>
<artifactId>auto-service</artifactId>
<version>1.0-rc7</version>
</dependency>
@SupportedAnnotationTypes("com.example.MyAnn")
@SupportedSourceVersion(SourceVersion.RELEASE_8)
@AutoService(Processor.class)
public class MyProcessor extends AbstractProcessor {
@Override
public boolean process(Set<? extends TypeElement> set, RoundEnvironment roundEnvironment) {
// do something
return true;
}
}
上記のどの方法を使用しても、このプロジェクト (モジュール) でクラスをコンパイルおよび生成することはできません。別のプロジェクト (モジュール) で使用するには、jar パッケージにパッケージ化する必要があり、別のプロジェクトでのみ表示できます。 (モジュール) にその旨を記載します。