2013-08-07 58 views
15

我有註釋處理器其中應產生具有通過接口獲取方法中定義的密鑰的枚舉。無法加載資源在註釋處理器(未在類路徑)

接口駐留在

MyProject的/ SRC /主/爪哇/ my.package.MyInterfaces.java。

我想驗證位於MyProject/src/main/resources/META-INF/resource-bundle/中的屬性文件是否包含生成的枚舉中定義的鍵。

我的問題是屬性文件不能通過處理器的類加載器或通過Filer.getResource(...)。

  • 如何使該項目的源或類路徑可用於處理器,以便我可以加載屬性文件?

  • 現在我只有處理器駐留在jar中的資源可用。 我曾嘗試通過eclipse Project/Properties/Java編譯器/註釋處理/處理器選項來定義-classpath和/或-sourcepath,但沒有成功。

有沒有人遇到過這樣的問題,任何人都可以給我一個線索,我怎樣才能使可用的處理器資源?

我確實有maven結構,但不使用maven,因爲應用程序中的舊依賴關係。所以maven現在不適合我。

的Eclipse 3.6赫利俄斯 似乎StandardLocation.SOURCE_PATHStandardLocation.CLASS_PATH未在文件管理器#getResource()方法來實現,所以寫生成的源或類文件SOURCE_PATHCLASS_PATH似乎是不可能的,還訪問上SOURCE_PATHCLASS_PATH任何文件*

謝謝。

+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(...)獲得。

我不知道我理解你的問題。但也許這裏有些東西會有幫助。

如何使該項目的源或類路徑可用於處理器,以便我可以加載屬性文件?

您需要在Eclipse中添加src/main/resources作爲「源文件夾」。首先在您的Java項目中選擇Eclipse中的Configure Build Path。然後選擇Source選項卡並點擊Add Folder。您應該能夠選擇src/main/resources文件夾,單擊Ok。您現在應該在「源文件夾」列表中看到src/main/resources

如果你看看你的target/classes目錄,你會看到所有的資源目錄中的文件在那裏,它可以讓你知道,他們被正確複製到類路徑中。

# 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 

然後在你的代碼,你可以做以下的參考文件。這將從類路徑的頂部加載文件。如果是在一個子目錄,然後你用鉛:

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

順便說一句,如果你了使用maven,你會加入類似下面給你pom.xml

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

作爲一種變通方法你可以嘗試通過命令行參數-Xboothclasspath/a:path添加需要使用的類路徑,/ a會將路徑中的值附加到引導類路徑。您需要將此作爲命令行選項添加到Eclipse中的實際批註處理運行中,以便: 右鍵單擊項目,選擇屬性,Java編譯器,批註處理,單擊表中的新建並添加鍵-Xbootclasspath/a和作爲值添加的路徑。恐怕我沒有嘗試過這個註釋處理,但值得一試!

相關問題