2013-03-05 187 views
22

我在eclipse中使用maven創建了一個webapp項目。當我在命令提示符下運行命令mvn包時,它顯示出錯信息。Maven包編譯錯誤

[ERROR] COMPILATION ERROR : 
[INFO] ------------------------------------------------------------- 
[ERROR] No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK? 
[INFO] 1 error 
[INFO] ------------------------------------------------------------- 
[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD FAILURE 
[INFO] ------------------------------------------------------------------------ 
[INFO] Total time: 4.310s 
[INFO] Finished at: Tue Mar 05 14:32:23 IST 2013 
[INFO] Final Memory: 16M/218M 
[INFO] ------------------------------------------------------------------------ 
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.0:compile (default-compile) on project Compilation fa 
ilure 
[ERROR] ***No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?*** 
[ERROR] -> [Help 1] 
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch. 
[ERROR] Re-run Maven using the -X switch to enable full debug logging. 
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles: 
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException 

我試圖改變jdk和jre。但不工作。仍然顯示相同的錯誤

+0

在控制檯中,你的'javac'輸出是什麼? – Raptor 2013-03-05 09:40:43

+0

你運行過'mvn -e package'嗎? – orique 2013-03-05 09:41:21

+4

您應該仔細閱讀錯誤消息:** [錯誤] ***在此環境中不提供編譯器。也許你正在運行JRE而不是JDK?*****。我會建議檢查JAVA_HOME,如果它指向一個JDK和** NOT **到JRE。 – khmarbaise 2013-03-05 19:34:06

回答

46

Windows 7 - 64位,有一個權限問題,它會阻止安裝程序將文件C:\Program Files\Java\jdk1.6.xx\lib\tools.jar解壓縮到您的本地。這個jar文件是什麼maven-compiler-plugin 3.x版本使用,而不是通常javac

解決方案: 運行,作爲管理員,而Java JDK安裝!並確保tools.jar正坐在C:\Program Files\Java\jdk1.6.xx\lib\

如果您正在使用M2E的Maven集成插件,你想看到的文件是可見通過以下步驟到Eclipse在Eclipse:

  • 去窗口 - >首選項 - > Java - >已安裝的JRE
  • 選擇您正在使用的JDK(C:\ Program Files \ Java \ jdk1.6.xx)
  • 按Edit查看jars的列表,包括tools.jar,你可以添加它作爲添加外部JAR

然後配置通過這些步驟來運行行家:

  • 運行 - >設置 - 運行>填寫姓名,基本目錄和目標。
  • 然後在同一個窗口移動到JRE選項卡並指向JDK \ jdk1.6.xx \
+2

+1 - 完美答案..非常感謝。它幫助.. :) – LPD 2013-04-25 09:16:55

+0

你最後的回答比當前版本好很多。我回到這裏來參考,不得不去編輯歷史,以瞭解解決方案。希望如果這恢復回來。謝謝 – LPD 2013-05-03 09:58:36

+0

@LPD謝謝你提請我注意。我希望現在更完整!儘管你可以省略包括外部罐子的步驟,但我沒有看到它的工作。 – Sam 2013-05-03 13:06:44

1

在我的情況下,錯誤「沒有編譯器在這種環境下提供的。也許你正在運行在JRE上而不是在JDK上「是由於JRE安裝在與JDK默認位置不同的位置。

在64位linux下運行,我在Oracle的64位JDK SE 1.6.0_45上安裝了/opt/java。 32位和64位JRE的安裝位置分別爲/opt/java/jre32/opt/java/jre64,其中包含一個jre符號鏈接:(即。ln -s jre64 jre),因此jre -> ./jre64 (meaning/opt/jdk/jre was a symlink referencing/opt/jdk/jre64)。

一旦我將jre64重命名爲jre(即rm jre ; mv jre64 jre ; ln -s jre jre64),此問題就消失了;我能夠使用maven構建(netbeans內部)。

Maven似乎正在查看JRE路徑,並說「jre64不是JDK安裝中默認JRE的正確名稱,所以假設JDK不存在於../」),這會阻止它解析包含tools.jar的JDK lib目錄的位置等。

尚未對其進行測試,但如果JRE不在默認位置(或或許不在%JAVA_HOME%\jre目錄中)。如果安裝了JDK和JRE,則Oracle的安裝程序想要在%JAVA_HOME%\jre6處安裝JRE,而不是%JAVA_HOME%\jr e。這可能是因爲JDK卸載過程需要\jre目錄;如果JRE已安裝在\jre目錄中的JDK JRE的頂部,而不是在\jre 6上,卸載JRE後卸載JDK將會失敗,除非\ jre目錄被複制,JRE被卸載並且\jre副本爲恢復到\jre

+1

當maven作爲Windows Server 2008 R2上的Jenkins作業的一部分運行時,我得到此錯誤。我已經在D:驅動器上安裝了Java。將Java重新安裝到C上的默認位置(並更新JAVA_HOME和Jenkins配置)之後,編譯的作業沒有錯誤。 – user2251060 2013-10-08 16:18:37

+1

在同一個Jenkins主機上再次遇到此問題,但現在爲maven 3工作。可以從命令行構建好。在爲作業的Maven配置選項添加-X後,我看到maven-resources-plugin具有java.home到C:\ Program Files \ Java \ jre7,這是與JDK一起安裝的JRE。我卸載了單獨的JRE,現在java.home = C:\ Program Files \ Java \ jdk1.7.0_45 \ jre,錯誤消失了。 – user2251060 2013-12-04 13:12:40

3

什麼工作對我來說(32位Windows 7)是以下添加到您的PATH環境變量:

%JAVA_HOME%\ lib中;

+0

這是最簡單的解決方案。我只是將C:\ Program Files \ Java \ jdk1.8.0_60 \ lib添加到PATH變量的末尾,並且我的jenkins構建完成了。 – GamerJ5 2016-06-29 05:15:19

3

試試這個。轉到窗口 - >首選項 - > Java - >已安裝的JRE。

雙擊安裝JRE中的JRE。

在JRE Home中給出JDK路徑(例如,C:\Program Files\Java\jdk1.7.0_80\),並將JRE名稱指定爲JDK。 點擊完成,然後確定。

對我來說它工作。

11

轉到'運行時配置'並將JRE配置爲JDK。

Select the right JDK for your Runtime

或者作爲@PawanKumarBaranwal建議,設置默認的JDK。但是,如果您配置了多個JRE,請注意。

Select default JRE

+1

對我而言,情況正是如此。現在一切工作正常後,我改變爲jdk。 – drochora 2016-05-03 07:20:02

1

轉到preferences>installed JRE>

然後單擊add

選擇 C:\program files\java\

enter

它會搜索其他的JRE比JDK,然後選擇究竟是不是小號當選

-1

我正在使用maven plugin for Eclipse(V3.3),並且一直在努力解決這個錯誤。我終於找到了與過時的java源代碼鏈接的解決方案:它與JRE或JDK無關(我使用JRE 1.7)。

我在其他論壇上發現這是maven-compiler-plugin中的一個已知問題(V3.3和3.5.1的結果相同)。

所以,我只是手動重新編譯陳舊的源代碼並再次運行目標,這次沒有任何問題。

爲了弄清楚陳舊的來源,運行帶選項-X(調試)的目標,並尋找與項目

[DEBUG] Stale source detected: 

表示Java類文件開始(手動重新編譯......)。

希望這可以是有用的,因爲由maven編譯器給出的消息使我在錯誤的方向搜索(玩JRE,JDK,JAVA-HOME等)。

1

有幾個選項可以指定。

步驟:右鍵在項目瀏覽器中的項目轉到運行 - >運行配置 - >點擊Maven Build - >點擊你的構建配置/或創建一個新的配置。你會看到下面給出的快照窗口,點擊JRE選項卡。

您看到您有3個選項1)工作空間默認JRE 2)執行環境3)替代JRE 1)工作空間默認JRE從頂部的「窗口」菜單設置 - >首選項 - > Java - >安裝的JRE-這裏你可以添加你的JDK 2)執行環境JDK可以在pom.xml中設置

<build> 
<plugins> 
    <plugin> 
     <artifactId>maven-compiler-plugin</artifactId> 
     <version>3.1</version> 
     <configuration> 
      <fork>true</fork> 
     <executable>C:\Program Files\Java\jdk1.7.0_45\bin\javac.exe</executable> 
    </configuration> 
</plugin> 

3)替代JRE可以用來從目錄中選擇一個JDK

1

Go to windows -> Preferences -> Java -> Installed JREs

可能是JRE已添加 enter image description here

click on Add -> Standard VM -> Next -> Directory

,並在我的案件路徑瀏覽JDK是C:\Program Files\Java\jdk1.8.0_111

then Click on finish.

你會看到窗口像這樣

enter image description here

select JDK -> Apply -> Ok

和你做。

0

to set path in below manner

保持JDK的路徑在路徑變量首位,讓其他的java的路徑將被忽略。編譯錯誤將被解決。

+0

儘管這個鏈接可能回答這個問題,但是在Stack Overflow中只提供鏈接的答案,你可以通過獲取鏈接的重要部分並將其放入你的答案來改進這個答案,這確保你的答案仍然是一個答案,如果鏈接獲得改變或刪除:) – WhatsThePoint 2017-11-22 14:36:46