[英]Eclipse 3.5+ - Annotation processor: Generated classes cannot be imported
我正在使用第三方注釋處理器從項目中的注釋類生成元數據代碼(.java文件)。 我已經通過Eclipse(屬性-> Java編譯器->注釋處理)成功配置了處理器,並且代碼生成正常(代碼是自動創建和生成的)。 而且,Eclipse成功地自動完成了所生成的類及其字段,而沒有任何錯誤。 假設我有一個類“ some.package.Foo”,而生成的元數據類是“ some.package.Foo_”。 借助自動完成功能,我可以在Eclipse編輯器中獲得以下代碼,而不會出現任何錯誤:
import some.package.Foo_;
...
public class Test {
void test() {
Foo_.someField = null; // try to access a field from the generated class Foo_
}
}
但是,一旦我實際構建項目(或者由於啟用了自動構建功能而只是保存文件),就會收到錯誤消息,提示無法解決“ some.package.Foo_”。 看來Eclipse正在同時生成或編譯some.package.Foo_,或者更有可能。
我發現了兩個臨時解決方案(實際上實際上阻礙了注釋處理器的使用):
這是Eclipse中的錯誤嗎? 如果是,是否有比我上面提到的兩個更好的解決方法或快速解決方案? 如果沒有,我應該如何解決該問題?
我還嘗試過在構建路徑上重新排列庫的順序,這無濟於事。
我假設您正在上一輪處理器中生成源。 不推薦這樣做,它會導致您遇到的問題。 此處的說明: http : //code.google.com/p/acris/wiki/CodeGenerationPlatform_Pitfall_Rounds
因此,我的建議是在常規處理回合中生成源,最后一回合應僅用於通知處理已結束或類似情況。
希望這對您有幫助。
我有一個類似的問題,我發現的唯一問題是,具體來說是導入無效,但是類本身的引用確實起作用。 我使用的解決方法是在所有需要生成的類的情況下使用FQCN(除非生成的類在同一程序包中,否則顯然不需要導入)。
因此,以您的示例為例,我願意:
public class Test {
void test() {
some.package.Foo_.someField = null; // try to access a field from the generated class Foo_
}
}
我唯一的猜測是,eclipse編譯器在進行批注處理之前正在處理導入,imho必須是eclipse中的錯誤。
我知道這個問題已有一年多的歷史了,所以我很想知道您是否找到其他解決方法。
我們遇到了一個類似的問題,顯然只是解決了這個問題,因此考慮在SO處共享它,以防它對某人有所幫助。
我們正在使用:
我們的問題:
說,我們有一個名為com.abc.xyz的程序包,其中有一個名為OurEntity的實體類。 當我們構建項目(JPA,EJB,EAR等),並在開始時使用mvn clean進行構建時,將生成元模型類。 並適當包裝在PU罐中。 但是,當我們嘗試導入生成的元模型類com.abc.xyz.OurEntity_時,Eclipse無法解決它。 OP顯然已經超過了這一點:-)。 Maven構建失敗,表示無法解析該類。 除了一些錯誤報告(例如以下報告)外,Google的幫助不多: https : //bugs.eclipse.org/bugs/show_bug.cgi?id=350378
該錯誤報告說,導入整個軟件包而不是單個類很有幫助。 因此,嘗試了一下,但沒有任何好處。 它還說(David Heitzman也是如此),使用完全限定的類名對他們有效。 那也不起作用。
解決方案:
在需要使用元模型類的項目的Eclipse構建路徑中添加了PU jar 。 所有紅色底線突然消失了(不足為奇)。 但是擔心的是同一只耳朵上可能有兩個PU。 但是,maven會自動解決這個問題。
由於這個相當老的問題得到了關注,而沒有指出OP專門要求的非常可能的Eclipse錯誤,因此我想用指向Eclipse Bug Tracker的指針來補充上述答案:
解決方法包括
import some.package.*;
) some.package.Foo
而不使用導入
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.