2009-10-26 47 views
1

我有一個自己的註釋處理器(姑且稱之爲MyProcessor)和項目(姑且稱之爲MyProject的)由 傳遞-processorjavac它使用的處理器。Java:如何在註解處理器和另一個項目之間進行通信?

現在我需要MyProcessor生成一些輸出並使其可用於MyProject。

我有以下選項(和問題):

  • 讓MyProcessor寫一個文件的路徑,由酒店user.dir指定。
    問題:從MyProcessor的角度來看,user.dir永遠是我的家目錄,而不是MyProject的路徑。

  • 使用javac-A選項將MyProject的當前目錄傳遞給MyProcessor。
    問題:這是一個醜陋的硬編碼路徑:/some/path/to/MyProject/

  • 讓MyProcessor生成一些源文件,然後由javac與MyProject一起編譯,以便MyProject可以引用此編譯類並從中檢索數據。
    問題:這對於這麼簡單的任務來說太複雜了。

  • 還有其他的選擇嗎?

有人可以請建議,如何進行?

回答

4

Processor.init()方法(你已經實現)調用ProcessingEnvironment作爲參數,而該方法又有一個getFiler()方法返回一個Filer實例。

您應該使用FilercreateResource()方法(假定輸出產生既不是類和源;否則使用適當create法)和您的輸出寫入到要麼classsource位置(前者可能優選的,但這取決於你在做什麼)。如果需要的話,它們都可以通過命令行開關覆蓋,但是它們將在構建過程中使用。

+0

謝謝!你已經保存了我的一天;)我使用Filer創建一個FileObject,並使用'myProperties.store(fileObject.openOutputStream,「」); – 2009-10-26 23:00:38

相關問題