[英]Javac not running annotation processors
我正在重新審視我至少一年沒有接觸過的 maven 項目。 我很確定當我離開它時它編譯成功( target
目錄中仍然有一個工作 jar),但現在編譯失敗,因為缺少生成的類。
target/generated-sources/annotations
中確實沒有源(不存在)-proc:none
調用 javac(不是)mvn clean dependency:unpack-dependencies -Dmdep.useSubDirectoryPerArtifact=true
以確保預期的依賴項位於類路徑上,並且它們包含有效的META-INF/services/javax.annotation.processing.Processor
條目(是的,有多個,包括org.immutables.processor.ProxyProcessor
)-nowarn
選項並添加-verbose -XprintRounds -XprintProcessorInfo -Xlint -J-verbose
。 注意:我還必須添加主 class 的相對路徑,否則 javac 會抱怨沒有來源。-proc:only
選項-processor org.immutables.processor.ProxyProcessor
添加到 javac 命令(處理器現在已加載,但仍然沒有打印輪次,也沒有生成類)-processor org.immutables.processor.ProxyProcessorXXX
以查看它是否會有所作為(確實如此,它現在打印一條警告,指出使用proc:only
請求處理,但未找到處理器)-processor
選項是否出現該警告,這應該使 javac 從 class 路徑檢測處理器(它沒有顯示警告,這表明它正在檢測處理器但日志沒有顯示任何跡象其中)這是我目前使用的 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.