2017-03-08 2 views
0

現在、Intellij 15.0.6のGradle 3.3プロジェクトで作業しています。注釈プロセッサを使用してクラスパスにXMLリソースを生成

Gradle APT pluginを使用して、クラスパスにアノテーションプロセッサを追加しています。

Javaクラスファイルを生成するときはうまく動作しますが、ビルドディレクトリの生成ディレクトリに相当するresourcesディレクトリ内にXMLソースを生成できる必要があります。ここで

は、現在、私のビルドディレクトリ構造です:

Project Build Directory Image

あなたが見ることができるように、それは私がこの問題を引き起こす可能性のあるものです疑うresourcesディレクトリを、含まれていません。

私は./gradlew assembleを経由して私の注釈プロセッサを実行しているから受け取る現在の例外は次のとおりです。

FileObject source = processingEnv.getFiler() .createResource(StandardLocation.CLASS_PATH, "", "ap-test-2.html");

注:私は、xmlファイルを生成するために、私の注釈プロセッサの中に使用していますjava.lang.IllegalArgumentException: Resource creation not supported in location CLASS_PATH

コード:私はテストのようにHTML拡張を使用しましたが、XMLは同じ結果を生成するはずです。

javax.tools.StandardLocationだけでなく、他の出力場所があります。

SOURCE_OUTPUT場所はsrc/apt/main以内に、生成されたJavaクラスと同じパッケージ内にXMLを配置するために働きました。しかしこれは私が望む行動ではありません。クラスパス内に住む必要があります。

私は広範な研究の後、他の場所で議論されたこの例外は見つかりませんでした。

何か助けていただければ幸いです。この質問を読んでいただきありがとうございます。

答えて

1

StandardLocation.CLASS_PATHは出力用ではありません。出力場所は、SOURCE_OUPUTbuild/generated/source/apt/…フォルダ)、CLASS_OUTPUT(標準のGradle build/classes/…)、NATIVE_HEADER_OUPUTです。 https://docs.oracle.com/javase/8/docs/api/javax/tools/StandardLocation.html

JavaCにはクラスとリソースの出力という概念はありませんが、コンパイル時に注釈プロセッサを実行すると、CLASS_OUTPUTが機能します(Gradleはすべてを最終ディレクトリ/ JARにコピーする必要があります)。 https://docs.oracle.com/javase/8/docs/technotes/tools/unix/javac.html

+0

お返事ありがとうございます。面白いことに、Intellijは 'build'クラスパスファイルを' classes'と 'resources'の2つのディレクトリに分けています。私のプロセッサは、場所を 'CLASS_OUTPUT'に変更した後、HTMLを' classes'ディレクトリに追加しました。これをさらにテストし、私が見つけたものをあなたに知らせます。 –

+1

Intellijはこれらの2つのディレクトリをマージしてクラスパスに追加すると思われますので、場所を 'CLASS_OUTPUT'に設定するのは理論的には有効です。私は、これが本当であることを確認するために私のプロセッサで動作するMVPを取得しようとします。 –

関連する問題