NetBeans 專案建置時偶發 build-impl.xml:305: Compile failed,重建即恢復。本文剖析 javac Ant 任務配置、processorpath 與註解處理器機制,揭示「臨時檔案鎖定/殘留」為核心根因,給出永久修復方案。
nbproject/build-impl.xml:305: Compile failed; see the compiler error output for details.
對應 build-impl.xml 第 305 行附近的 <javac> 任務:
<javac ... fork="yes" includeantruntime="false" ...>
<compilerarg value="-processorpath"/>
<compilerarg path="@{processorpath}:${empty.dir}"/>
<compilerarg line="${ap.processors.internal}"/>
<compilerarg value="-s"/>
<compilerarg path="@{apgeneratedsrcdir}"/>
<compilerarg line="${ap.proc.none.internal}"/>
</javac>
fork="yes" 另啟 JVM 編譯-processorpath 指向 @{processorpath}:${empty.dir},${empty.dir} 為臨時空目錄-s @{apgeneratedsrcdir} 產生註解處理器輸出的原始碼javac 讀取殘留/鎖定檔案 → 編譯失敗build/、dist/、nbproject/private/專案右鍵 → Properties → Build → Compiling → 取消勾選 Enable Annotation Processing (若專案未用 Lombok/MapStruct 等)。
<!-- nbproject/project.properties -->
apgeneratedsrcdir=build/generated-sources/ap-source-output
避免與主源碼目錄混雜,Clean 時可精確刪除。
build-impl.xml 穩定性<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.11.0</version>
<configuration>
<annotationProcessorPaths>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.30</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
| 屬性 | 作用 | 建議值 |
|---|---|---|
fork | 獨立 JVM 編譯,隔離記憶體 | yes (大型專案) |
includeantruntime | 編譯 classpath 包含 Ant 自身庫 | false (避免汙染) |
-processorpath | 註解處理器 classpath | 獨立目錄 |
-s | Generated source 輸出目錄 | build/generated-sources/apt |
「Compile failed」多為 Annotation Processor 臨時目錄殘留/鎖定 導致。短期 Clean & Rebuild,長期 遷移至 Maven/Gradle 徹底解決。