簡體   English   中英

Javac沒有運行注釋處理器

[英]Javac not running annotation processors

問題

我正在重新審視我至少一年沒有接觸過的 maven 項目。 我很確定當我離開它時它編譯成功( target目錄中仍然有一個工作 jar),但現在編譯失敗,因為缺少生成的類。

我試過的

  • 已驗證target/generated-sources/annotations中確實沒有源(不存在
  • 確保沒有使用-proc:none調用 javac(不是
  • Ran mvn clean dependency:unpack-dependencies -Dmdep.useSubDirectoryPerArtifact=true以確保預期的依賴項位於類路徑上,並且它們包含有效的META-INF/services/javax.annotation.processing.Processor條目(的,有多個,包括org.immutables.processor.ProxyProcessor
  • 遵循如何確保 javac 正在使用注釋處理器並在未使用時進行故障排除中的這些步驟:
    1. 從 maven 調試日志中獲取 javac 選項
    2. 刪除-nowarn選項並添加-verbose -XprintRounds -XprintProcessorInfo -Xlint -J-verbose 注意:我還必須添加主 class 的相對路徑,否則 javac 會抱怨沒有來源。
    3. 驗證處理器的 class 是否已加載(不存在
    4. 查找至少一個處理輪次日志(不存在
    5. 確保注釋存在於循環日志列表中(無循環日志
  • 為 javac 命令添加了-proc:only選項
  • -processor org.immutables.processor.ProxyProcessor添加到 javac 命令(處理器現在已加載,但仍然沒有打印輪次,也沒有生成類)
  • 將處理器選項更改為-processor org.immutables.processor.ProxyProcessorXXX以查看它是否會有所作為(確實如此,它現在打印一條警告,指出使用proc:only請求處理,但未找到處理器)
  • 檢查如果我不使用-processor選項是否出現該警告,這應該使 javac 從 class 路徑檢測處理器(它沒有顯示警告,這表明它正在檢測處理器但日志沒有顯示任何跡象其中)
  • 從JDK1.8切換到JDK9后在上面嘗試過(使用jenv)
  • 安裝 Zulu 1.7 並在切換到它后嘗試上面(使用 jenv)

可能的因素

  • 我做了一個完全干凈的 macOS 安裝
  • 我之前運行過 macOS Sierra,目前是 High Sierra
  • 在我沒有安裝 JDK9 之前
  • 我很久以前改用 Gradle,所以我可能忘記了關於 maven 的一個重要細節

命令選項

這是我目前使用的 javac 命令:

javac -d./target/classes -classpath./target/classes:$HOME/.m2/repository/com/google/dagger/dagger/2.4/dagger-2.4.jar:$HOME/.m2/repository/com/google/dagger/dagger-compiler/2.4/dagger-compiler-2.4.jar:$HOME/.m2/repository/com/google/auto/factory/auto-factory/1.0-beta3/auto-factory-1.0-beta3.jar:$HOME/.m2/repository/org/immutables/builder/2.3.9/builder-2.3.9.jar:$HOME/.m2/repository/org/immutables/value/2.3.9/value-2.3.9.jar:<LONG LIST OF DIRECT AND TRANSITIVE DEPENDENCIES HERE> -sourcepath./src/main/java: -s./target/generated-sources/annotations -verbose -XprintRounds -XprintProcessorInfo -Xlint -J-verbose -processor org.immutables.processor.ProxyProcessor -proc:only./src/main/java/com/mycompany/myproject/Main.java

注意:為了更好的可讀性,我將每個參數放在一個新行上,用$HOME/./替換了絕對路徑,並且我省略了大多數依賴項。

問題

我在這里想念什么? 任何建議或指示將不勝感激。

據我所知,maven為生成的源生成一個標記文件或標記目錄(以點開頭)。 但也是很久以前......

我們在 git 分支上遇到了同樣的問題,而主分支構建良好。 根本原因原來是 a.java 源具有重復定義的私有 void function。 這個重復是由主分支的合並引起的。 起初我們沒有注意到它,因為合並沒有引起沖突。 Amazon Corretto 8 和 11 編譯器出現此問題。 刪除重復的私有 void function 后,java 編譯器像以前一樣開始生成源。

對於某些解析失敗, javac似乎完全且靜默地跳過注釋處理。

對我來說,由於我的注釋處理器沒有運行,由合並錯誤引起的重復注釋導致了數千次失敗 - 所以真正的錯誤完全丟失了。

@Data @AllArgsConstructor @NoArgsConstructor @EqualsAndHashCode(callSuper = false)
@EqualsAndHashCode(callSuper = false)

暫無
暫無

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

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