簡體   English   中英

Eclipse 3.5+-注釋處理器:無法導入生成的類

[英]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_,或者更有可能。

我發現了兩個臨時解決方案(實際上實際上阻礙了注釋處理器的使用):

  1. 在生成該生成的類的每個版本之前,右鍵單擊每個生成的文件,然后轉到“屬性”,然后取消選中“派生”對勾。 在那之后,我進行了項目清理,導入工作正常-沒有更多錯誤。 但是,如果我再進行一次清理,則會再次顯示錯誤,因為生成文件會導致再次(自動)檢查“派生”標記。 因此,這確實很煩人且耗時。
  2. 我還取消了所有這些文件的“派生”對勾,這一次我取消了源文件夾和包含這些文件的軟件包中的“派生”對勾。 然后,我禁用注釋處理器,然后進行清理。 即使再進行一次清理,也不會再有導入錯誤,但是使用注釋處理器沒有任何好處,因為如果要更改某些內容以更新模型,則需要重新打開注釋處理器並重復執行在生成這些文件的新版本之后,將其關閉會很繁瑣。

這是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處共享它,以防它對某人有所幫助。

我們正在使用:

  • Eclipse Indigo(版本ID:20120216-1857)
  • Maven的m2e連接器
  • openJPA用於生成靜態元模型類

我們的問題:

說,我們有一個名為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的指針來補充上述答案:

無法解析帶有引用常量的參數的生成的類IF處理注釋的導入

解決方法包括

  1. 對定義生成的類的包進行通配符導入(即import some.package.*;
  2. 使用生成的類的完全限定名稱,即在代碼中引用some.package.Foo而不使用導入
  3. 切換到較新的Eclipse。 Eclipse 4.4(又名Luna)解決了此特定的Eclipse錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM