簡體   English   中英

Java:未解決的編譯問題

[英]Java: Unresolved compilation problem

“java.lang.Error:未解決的編譯問題”的可能原因是什么?

附加信息:

在從現有 JARs 之上的構建復制一組更新的 JAR 文件並重新啟動應用程序后,我看到了這一點。 JARs 是使用 Maven 構建過程構建的。

如果接口更改,我希望看到 LinkageErrors 或 ClassNotFound 錯誤。 上面的錯誤暗示了一些較低級別的問題。

干凈的重建和重新部署解決了這個問題。 此錯誤是否表示 JAR 已損壞?

(改寫於 2015-07-28)

Eclipse 在編譯包含錯誤的代碼時的默認行為是生成字節碼並拋出您看到的異常,從而允許程序運行。 這是可能的,因為 Eclipse 使用自己的內置編譯器,而不是 Apache Maven 使用的 JDK 中的javac<\/code> ,並且由於錯誤而導致編譯完全失敗。 如果您在一個 Maven 項目上使用 Eclipse,而您也在使用命令行mvn<\/code>命令,則可能會發生這種情況。

解決方法是修復錯誤並重新編譯,然后再次運行。

該設置在此屏幕轉儲中用紅色框標記:

嘗試清理eclipse項目

你只是嘗試通過命令清理 maven

mvn clean

您編譯的類可能需要使用新的 jar 從源代碼重新編譯。

嘗試運行“mvn clean”然后重建

Thorbjørn Ravn Andersen 正確回答了主要部分。

這個答案試圖闡明剩下的問題:有錯誤的類文件怎么會出現在 jar 中?

每個構建(Maven 和 javac 或 Eclipse)在遇到編譯錯誤時都會以特定的方式發出信號,並且會拒絕從中創建 Jar 文件(或至少突出提醒您)。 將有錯誤的類文件靜默放入 jar 的最可能原因是 Maven 和 Eclipse 的並發操作。

如果您在運行 mvn 構建時打開了 Eclipse,您應該禁用<\/em>Project<\/strong> > Build Automatically<\/strong> ,直到 mvn 完成。

編輯<\/strong>:讓我們嘗試將謎語分成三個部分:

(1) “java.lang.Error: Unresolved compiler problem”是什么意思

Thorbjørn Ravn Andersen 對此進行了解釋。 毫無疑問,Eclipse在編譯時<\/em>發現了一個錯誤。

(2) eclipse 編譯的類文件怎么會出現在 maven 創建的 jar 文件中(假設 maven沒有<\/em>配置為使用 ecj 進行編譯)?

這可以通過調用 Maven 而不進行清理或不完整清理來實現。 或者,在<\/em>Maven 繼續將類文件收集到 jar 之前,自動 Eclipse 構建可以對文件系統中的更改做出反應(由 Maven 完成)並重新編譯一個類(這就是我在原始答案中所說的“並發操作”的意思<\/em>)。

(3) 怎么會出現編譯錯誤,但是mvn clean<\/code>成功了?

再次有幾種可能性:(a) 編譯器不同意源代碼是否合法,或者 (b) Eclipse 使用損壞的設置進行編譯,例如不完整的類路徑、錯誤的 Java 合規性等。無論哪種方式,Eclipse 中的一系列刷新和干凈構建應該把問題浮出水面。

當我使用具有無效類路徑的啟動配置時出現此錯誤。 就我而言,我有一個最初使用 Maven 的項目,因此啟動配置中有一個 Maven 類路徑元素。 后來我將項目更改為使用 Gradle,並從項目的類路徑中刪除了 Maven 類路徑,但啟動配置仍然使用它。 我在嘗試運行它時遇到了這個錯誤。 清理和重建項目並沒有解決這個錯誤。 相反,編輯啟動配置,刪除項目類路徑元素,然后將項目添加回類路徑中的用戶條目。

我多次遇到此錯誤並努力解決。 最后,我刪除了運行配置並重新添加了默認條目。 它工作得很好。

"

  1. 如果您忘記了,請嘗試在 eclipse 中包含package名稱
  2. 在使用之前導入所有包,例如:在使用Scanner 類之前import java.util.Scanner
  3. 這些改進可能會奏效,並且不會再出現Java: Unresolved compilation problem
  4. 還要確保檢查compiler compliance level和選擇的jdk version是否相同

作為一個奇怪的案例,我遇到了這樣一個異常,其中異常消息(未解析的編譯 bla bla)被硬編碼在生成的類本身內部。 反編譯類揭示了這一點。

"

我在使用 visual studio Code 時遇到了同樣的問題。 根本原因是備份 java 文件留在同一目錄中。

刪除備份 java 文件當構建失敗時,選擇 Fix it,它會清理緩存並重新啟動 workSpace。

確保您已從構建路徑中刪除不可用的庫(jar 文件)

"

暫無
暫無

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

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