2013-08-07 11 views
15

私は、インタフェースのゲッターメソッドで定義されたキーを持つ列挙を生成するアノテーションプロセッサを持っています。Annotation Processorでリソースを読み込めません(クラスパス上ではありません)

インターフェースは

MyProjectと/ SRC /メイン/ジャワ/ my.package.MyInterfaces.javaに存在します。

MyProject/src/main/resources/META-INF/resource-bundle/にあるプロパティファイルに、生成された列挙型で定義されたキーが含まれている場合は、そのプロパティファイルを検証します。

私の問題は、プロパティファイルがプロセッサのクラスローダーまたはFiler.getResource(...)を介して利用できないということです。

  • このプロジェクトのソースまたはクラスパスをプロセッサで使用できるようにするにはどうすればプロパティファイルをロードできますか?

  • ここでは、プロセッサが常駐するjarファイル内のリソースしかありません。 プロジェクト/プロパティ/ Javaコンパイラ/アノテーション処理/プロセッサオプションを使用して-classpathおよび/または-sourcepathを定義しようとしましたが、うまくいかなかった。

誰もがこのような問題に直面したことはありますか?どのように私はリソースをプロセッサで利用できるようにすることができますか?

私はmaven構造を持っていますが、アプリケーション内の古い依存関係のためにmavenは使用していません。だから、今は私のための選択肢ではありません。

のEclipse 3.6 Heliosの は* StandardLocation.SOURCE_PATHStandardLocation.CLASS_PATHSOURCE_PATHCLASS_PATH上の任意のファイルにアクセスして、可能ではないようですので、SOURCE_PATHまたはCLASS_PATHに生成されたソースまたはクラスファイルを書き込む、ファイラー#のgetResource()で実装されていないようです

ありがとうございます。

+0

はい、実装されていないようです。誰でも回避策ですか? – Arne

+1

あなたはすべてこれを解決しましたか?私は同様の問題を抱えています:http://stackoverflow.com/questions/29658252/how-to-obtain-the-right-javafilemanager-in-a-java-annotation-processor – jurgenv

+0

ソースの場所よりも重要なのは場所ですあなたの出力フォルダにあります。ファイルがoutput/META-INF/resource-bundleにも入っていることを確認しましたか?どのように構築するのですか?出力フォルダは何ですか?バンドルをロードするときに指定するパスは何ですか? –

答えて

0

私の問題は、プロパティファイルがプロセッサのクラスローダーまたはFiler.getResource(...)で利用できないということです。

あなたの問題を理解しているかどうかはわかりません。しかし、おそらく何かが助けになるでしょう。

このプロジェクトのソースまたはクラスパスをプロセッサで使用できるようにするにはどうすればプロパティファイルをロードできますか?

src/main/resourcesをEclipseの「ソースフォルダ」として追加する必要があります。最初に、JavaプロジェクトのEclipseでConfigure Build Pathを選択します。次にSourceタブを選択し、Add Folderをクリックします。 src/main/resourcesフォルダを選択し、Okをクリックする必要があります。 [Source Folders]リストにsrc/main/resourcesが表示されます。

target/classesディレクトリを調べると、クラスパスに正しくコピーされたことを知らせるresourcesディレクトリのすべてのファイルが表示されます。

# files in the src main resources 
> ls src/main/resources/x/y/z 
jgroups_udp.xml 
# should compile into target/classes 
> ls target/classes/x/y/z 
jgroups_udp.xml org 
# and should show up in the jar 
> -tvf target/project.jar 
    0 Thu Nov 03 18:50:00 EDT 2016 META-INF/ 
135 Thu Nov 03 18:49:58 EDT 2016 META-INF/MANIFEST.MF 
... 
3036 Thu Nov 03 18:49:36 EDT 2016 x/y/z/jgroups_udp.xml 

次に、コード内で次のようにしてファイルを参照できます。これはクラスパスの上からファイルをロードします。あなたはは、Mavenを使用していた場合、あなたはあなたpom.xmlに次のようなものを追加することになり、

InputStream stream = 
    getClass().getClassLoader().getResourceAsStream("x/y/z/jgroups_udp.xml"); 

ところで:それはサブディレクトリにある場合、あなたがつながる回避策として

<build> 
    <resources> 
     <resource> 
      <directory>src/main/resources</directory> 
     </resource> 
    </resources> 
</build> 
0

ますコマンドライン引数-Xboothclasspath/a:pathを使用して使用する必要があるクラスパスを追加しようとする可能性があります。/ aはパスの値をブートクラスパスに追加します。 Eclipseで実行される実際のアノテーション処理のコマンドラインオプションとして、これを追加する必要があります。 プロジェクトを右クリックしてプロパティを選択し、Javaコンパイラ、アノテーション処理を選択し、テーブルの新規をクリックしてキー-Xbootclasspath/aを追加します。値として追加するパスを指定します。私は注釈処理のためにこれを試していないのですが、試してみる価値があります。

関連する問題