Java:注釈プロセッサと別のプロジェクトの間で通信する方法は?
-
06-07-2019 - |
質問
独自の注釈プロセッサ (MyProcessorと呼びましょう)とプロセッサを使用するプロジェクト(MyProjectと呼びましょう)
-processor
を javac
に渡します。
出力を生成してMyProjectで使用できるようにするには、MyProcessorが必要です。
次のオプション(および問題)があります:
-
MyProcessorが、プロパティ
user.dir
で指定されたパスにファイルを書き込むようにします。
問題: MyProcessorから見ると、user.dir
は常にMyProjectのパスではなく、私のホームディレクトリです。 -
javac
の-A
オプションを使用して、MyProjectの現在のディレクトリをMyProcessorに渡します。
問題:いハードコードパス:/ some / path / to / MyProject /
。 -
MyProcessorがいくつかのソースファイルを生成し、MyProjectとともに
javac
によってコンパイルされるため、MyProjectはこのコンパイルされたクラスを参照して、そこからデータを取得できます。
問題:このような簡単な(?)タスクには複雑すぎます。 -
他にどのようなオプションがありますか?
誰かが提案することができますか、どうすればいいですか?
解決
Processor.init()
メソッド(実装済み)は ProcessingEnvironment パラメータとして、を返す getFiler()
メソッドがあります。 href = "http://java.sun.com/javase/6/docs/api/javax/annotation/processing/Filer.html" rel = "nofollow noreferrer">ファイラーインスタンス。
Filer
の createResource()
メソッドを使用する必要があります(生成される出力がクラスでもソースでもないことを前提とします。そうでない場合は、適切な create
メソッド))に出力し、クラスまたはソースの場所(以前はおそらく望ましいですが、あなたが何をしているかによって異なります)。どちらも必要に応じてコマンドラインスイッチでオーバーライドできますが、ビルドプロセスで使用されるため、明確に定義されています。