2011-12-04 48 views
60

我一直在使用入門教程,但在使用Maven導入playn項目後,我卡住了。我使用64位Windows上運行Eclipse靛藍7.缺失的工件com.sun:工具:jar

所有導入的項目有相同的錯誤:

Missing Artifact com.sun:tools:jar in all the pom.xml files. 

幾個小時搜索論壇我都試過後:

安裝最新的Java 1.6.029 將我的JAVA_HOME環境變量更改爲指向\program files\Java\jdk1.6_029 更改我的Eclipse Java首選項以使用JRE jdk1.6_029

我真的想試用playn,但爲什麼有幾個帖子我似乎無法找到解決方案的consenus答案。有人說,Sun從64位jdk中刪除了一些東西,其他人說你必須編輯你的xml文件,許多人說你已經改變了你的JAVA_HOME,另一個人說你必須改變你的Eclipse的虛擬機選項。

任何幫助清理這件事,將不勝感激,並可能對許多人有用,因爲我沒有一個特別奇怪的設置在這裏。

(編輯) 這是第一個項目中的pom.xml。 Eclipse的標誌錯誤中說行:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <parent> 
    <groupId>com.googlecode.playn</groupId> 
    <artifactId>playn-project</artifactId> 
    <version>1.1-SNAPSHOT</version> 
    </parent> 

    <artifactId>playn-android</artifactId> 
    <name>PlayN Android</name> 
    <packaging>jar</packaging> 

    <repositories> 
    </repositories> 

    <dependencies> 
    <dependency> 
     <groupId>com.googlecode.playn</groupId> 
     <artifactId>playn-core</artifactId> 
     <version>${project.version}</version> 
    </dependency> 

    <!-- needed because Android uses the same JSON code as playn-java; 
     that should be factored into a library shared by both backends --> 
    <dependency> 
     <groupId>com.googlecode.playn</groupId> 
     <artifactId>playn-java</artifactId> 
     <version>${project.version}</version> 
    </dependency> 

    <dependency> 
     <groupId>com.google.android</groupId> 
     <artifactId>android</artifactId> 
     <version>${android.version}</version> 
     <scope>provided</scope> 
    </dependency> 

    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>4.8.1</version> 
     <scope>test</scope> 
    </dependency> 
    </dependencies> 

    <build> 
    <sourceDirectory>src</sourceDirectory> 
    </build> 
</project> 
+0

你得到同樣的錯誤從運行命令行行家? – Raghuram

+0

你可以發佈你的pom.xml嗎? –

+0

我添加了pom.xml文件。我很抱歉不知道如何使用命令行對maven進行任何操作。 – boldinventions

回答

24

我遇到了同樣的問題,我能解決這個問題的方法是添加tools.jar依賴位置到pom.xml。像這樣:

<dependency> 
    <groupId>com.sun</groupId> 
    <artifactId>tools</artifactId> 
    <version>1.6</version> 
    <scope>system</scope> 
    <systemPath>C:\Program Files\Java\jdk1.6.0_29\lib\tools.jar</systemPath> 
</dependency> 

確保您更改<systemPath>永遠你的tools.jar文件位於何處。

+31

我強烈建議不要這樣做 - 它解決了這個問題,但不能移植到其他開發人員或構建環境。看到其他的答案,他們似乎做的伎倆 –

+0

也許是更好的改變** ** Systempath下向 $ {java.home} /lib/plugin.jar

+0

http://stackoverflow.com/questions/3080437/ jdk-tools-jar-as-maven-dependency具有如何以便攜方式執行此操作。 – vorburger

1

在pom文件的有效POM選項卡中,我看到以下派生路徑: C:\Program Files\Java\jre6/../lib/tools.jar我認爲這不是Windows中的有效路徑。我試圖在jre6/lib文件夾以及Java/lib中複製tools.jar而沒有成功。

值 「C:\ Program Files文件\的Java \ JRE6」 來自注冊表

HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment\1.6.0_30 
HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment\1.6 

,並設置的JavaHome關鍵是你的JDK,JRE將安裝在那裏。然後,所有的編譯器錯誤都消失了。

重新安裝JDK並未解決問題。設置JAVA_HOME或java.home系統環境變量沒有幫助。

我見過的另一種方法是在每個pom xml文件中添加正確路徑的依賴項,但playn-samples中有很多文件,這些文件是需要編輯的一種荒謬的痛苦。

這是有效的POM結果,它顯示了錯誤的路徑!

<dependency> 
     <groupId>com.sun</groupId> 
     <artifactId>tools</artifactId> 
     <version>1.6</version> 
     <scope>system</scope> 
     <systemPath>C:\Program Files\Java\jre6/../lib/tools.jar</systemPath> 
     <optional>true</optional> 
    </dependency> 
-1

改變的${java.home}/../lib/tools.jar的相對位置的絕對路徑C:\Program Files\Java\jdk1.6.0_29\lib\tools.jar的 爲我工作。

您只需要在playn/pom.xml中更改它。

現在對於playn-samples,Vladiator是正確的,這是太多的POM文件要改變。

48

我剛剛在this question上發佈了關於這個同樣的問題以及我如何解決它,但我也會在這裏粘貼(並展開)它,因爲它似乎更相關。

在Windows 7中使用Eclipse時,即使從Eclipse設置中的JRE列表中刪除了JRE,並且只有JDK,我也遇到了同樣的問題。

我最終什麼事不必做(因爲你在你的問題中提到)是修改命令行,因爲我用它來啓動Eclipse的-vm參數添加到它像這樣快捷:

-vm "T:\Program Files\Java\jdk1.6.0_26\bin" 

當然,您可以調整它以指向您的 JDK安裝的bin目錄。這樣做會導致Eclipse自身使用JDK而不是JRE運行,然後它能夠​​正確地找到tools.jar

我相信這與Eclipse如何在沒有指定時找到它的默認JRE有關。我猜測它傾向於選擇JRE而不是JDK(爲什麼,我不知道)並且選擇了它找到的第一個兼容的JRE。如果它的Windows註冊表鍵不像Vladiat0r的答案所示,它會首先查找HKLM\Software\JavaSoft\Java Runtime Environment密鑰,而不是HKLM\Software\JavaSoft\Java Development Kit密鑰。

+9

這在Windows 7中適用於我們。我們必須修改快捷方式以添加-vm「...」參數,而不是使用eclipse.ini。此外,在錯誤消失之前,我們必須將我們的Maven項目重新導入工作區。 –

+2

同樣在這裏 - 沒有.ini的骰子,但cmdline中的-vm arg起作用。 –

+1

我編輯了答案來解釋如何更改eclipse.init。來源:https://wiki.eclipse.org/Eclipse.ini#-vm_value:_Windows_Example – OGrandeDiEnne

-1

如果您使用的是openjdk,那麼您需要安裝openjdk-6-sdk軟件包。

19

我在開發簡單的Web服務應用程序時遇到了同樣的麻煩,在我的情況下,我不得不添加代碼插件以獲取jaxws庫。但是,maven pom一直在問關於jar文件的工具。

我不得不說,以上說法都正確,你可以包括在POM文件下面的條目:

<dependency> 
    <groupId>com.sun</groupId> 
    <artifactId>tools</artifactId> 
    <version>1.6</version> 
    <scope>system</scope> 
    <systemPath>C:\Program Files\Java\jdk1.6.0_29\lib\tools.jar</systemPath> 
</dependency> 

但是,當你要部署到生產實例將它會怎麼樣呢?你可以用一個系統環境變量的引用來代替路徑,但是這看起來還是不太好,至少對我來說是這樣。

我發現一個StackOverflow的評論另一種解決方案:

Maven 3 Artifact problem

<dependency> 
    <groupId>org.apache.struts</groupId> 
    <artifactId>struts2-core</artifactId> 
    <version>${struts2.version}</version> 
    <exclusions> 
     <exclusion> 
      <artifactId>tools</artifactId> 
      <groupId>com.sun</groupId> 
     </exclusion> 
    </exclusions> 
</dependency> 

他們建議包括工具罐子排除語句和它的作品。所以總結:你可以包括你的依賴的排除規則,避免使tool.jar問題:

<exclusions> 
      <exclusion> 
       <artifactId>tools</artifactId> 
       <groupId>com.sun</groupId> 
      </exclusion> 
     </exclusions> 
+1

提示:使用'mvn dependency:tree'找到插入排除的位置。 – Lars

0

我已經在Windows 7和Eclipse 3.7 我設法開始

修復它同樣的問題

eclipse.exe -vm "D:\JDK6\bin"

您可以像這樣啓動cmd並啓動eclipse,或者您可以編輯快捷方式並在「目標部分」中添加-vm「D:\ JDK6 \ bin」作爲參數。

作爲一個旁註,我也嘗試添加-vm「D:\ JDK6 \ bin」到eclipse.ini,但沒有奏效。 添加JRE6將不起作用,因爲它的「lib」目錄中不包含tools.jar。只有JDK。

4

我和Windows 7最終我加入兩行eclipse.ini相同:

-vm 
C:\Program Files\Java\jdk1.6.0_35\bin 

我試着用%JAVA_HOME%那裏,但沒有奏效。

+0

請注意未來我:這必須在'-vmargs'行之前,因爲過去的任何事情都將被解釋爲虛擬機啓動參數。所以:在那之前! – eis

1

將此依賴關係添加到pom.xml文件中。希望這個幫助。
在你寫你的JDK的lib路徑<systemPath>屬性..

<dependency> 
      <groupId>com.sun</groupId> 
      <artifactId>tools</artifactId> 
     <version>1.4.2</version> 
     <scope>system</scope> 
     <systemPath>C:/Program Files/Java/jdk1.6.0_30/lib/tools.jar</systemPath> 
     </dependency> 
0

最終使用的eclipse.ini修復:

openFile 
-vm (Your Java Home JDK here) 

例如,-vm C:\Java\JDK\1.6

只好也改變JRE到JDK:

在Eclipse IDE中去:

  1. 窗口 - >首選項 - >安裝的JRE
  2. 單擊Add(找到新的JRE)
  3. 選擇標準JVM - >下一步
  4. 點擊目錄找到JRE主頁,放入JDK_INSTALL_LOCATION並完成。
  5. 轉到您的Java項目的屬性 - > Java構建路徑 - >庫 - >選擇JRE - >編輯 - >選擇工作區默認JRE - >完成
  6. 使用項目 - >清理進行完整的工作區清理。
6

我在Eclipse 4.3設置中解決了這個問題 - 只能通過將JDK庫添加到JRE的庫中。

轉到窗口 - >設置 - >爪哇 - >安裝的JRE - >選擇JDK,點擊編輯 - >單擊Add External JARs並添加的tools.jar(放置在JDK/lib目錄)

2

掙扎了一會兒後我終於得到這個與eclipse.ini而不是命令行。終於看完documentation後,我意識到,-vm參數必須是一個單獨的行,不帶引號,並提前任何-vmargs的:

-vm 
C:\Program Files\Java\jdk1.7.0_45\bin\javaw.exe 
0

正如其他海報陳述的問題,在這裏有與JRE做日食使用無法找到工具jar。我解決了這個問題,採取了與上述不同的方向,這是因爲我的項目和環境。

Eclipse 4.5至少需要Java 7才能運行,因此我的系統設置使用位於C:\ java \ jre1.8.0_45的Java 8 JRE。

接下來,我正在使用假設我正在運行Java 6 JDK的POM文件。

<profiles> 
    <profile> 
     <id>default-profile</id> 
     <activation> 
     <activeByDefault>true</activeByDefault> 
     <file> 
      <exists>${java.home}/../lib/tools.jar</exists> 
     </file> 
     </activation> 
     <properties> 
     <toolsjar>${java.home}/../lib/tools.jar</toolsjar> 
     </properties> 
    </profile> 
    <profile> 
     <id>osx_profile</id> 
     <activation> 
     <activeByDefault>false</activeByDefault> 
     <os> 
      <family>mac</family> 
     </os> 
     </activation> 
     <properties> 
     <toolsjar>${java.home}/../Classes/classes.jar</toolsjar> 
     </properties> 
    </profile> 
    </profiles> 

    <dependencies> 
    <dependency> 
     <groupId>com.sun</groupId> 
     <artifactId>tools</artifactId> 
     <version>1.6.0</version> 
     <scope>system</scope> 
     <systemPath>${toolsjar}</systemPath> 
    </dependency> 
    </dependencies> 

我不允許更改POM文件,所以我不得不做一些jiggery pokery。我從Java 6 JDK中複製了tools.jar,創建了目錄C:\ java \ lib並將其粘貼到那裏。然後我重新啓動了日食並清理了我的項目。 VOILA錯誤消失了。

這不是一個優雅的解決方案,我認爲正確的解決方案是改變POM的設置方式,但是因爲我無法做到這一點,所以這很有效。

9

沒有其他答案爲我做。那有什麼是您在日食pom.xml中的「依賴層次」,在給人一種過濾器「工具」透露,我有一個真正的依賴關係的tools.jar:

Eclipse View

所以罪魁禍首對我來說是這樣的:

<dependency> 
    <groupId>com.github.markusbernhardt</groupId> 
    <artifactId>robotframework-selenium2library-java</artifactId> 
    <version>1.4.0.7</version> 
    <scope>test</scope> 
</dependency> 

添加排除固定它:

<dependency> 
    <groupId>com.github.markusbernhardt</groupId> 
    <artifactId>robotframework-selenium2library-java</artifactId> 
    <version>1.4.0.7</version> 
    <scope>test</scope> 
    <exclusions> 
     <exclusion> 
      <artifactId>tools</artifactId> 
      <groupId>com.sun</groupId> 
     </exclusion> 
    </exclusions> 
</dependency> 

排除似乎並沒有什麼缺點吧。

+1

awesome..this解決方案終於爲我工作。謝謝。 –

+1

爲我工作,問題出現升級Java 6代碼庫到Java 8 – jasonoriordan

+1

這也幫助了我。謝謝@eis – Sanchit

0

試過以上所有我仍然有同樣的問題。

  • PATH環境變量指向JDK 1.7 \ BIN
  • 我的JAVA_HOME環境變量指向JDK 1.7
  • 我的eclipse.ini有javaw進程-vm項指向JDK 1.7
  • 我的日食首選項已將JDK 1.7作爲安裝的JRE。
  • 我的項目構建路徑是使用JDK 1.7。

然後我試圖下面,

  • 打開命令提示和輸入Java的版本。它向我展示了JRE版本1.8。

  • 打開命令提示符並轉到JDK 1.7 bin目錄的位置並鍵入java -version。這次它正確地顯示了1.7。

然後,在挖掘了幾處地方後,我發現除了上述位置之外,還有其他位置用於Java運行時。

註冊

也存在其中JRE位置的

HKLM\Software\Javasoft\Version

下指定我改變了這裏的條目指向的JDK 1註冊表項。7

ProgramData

目錄 「C:\ ProgramData \ ORACLE \的Java \ javapath」 出現在PATH環境變量,幷包含了指向爪哇,javaw進程等等 這些快捷方式的目標都是JRE 1.8。 (這個我覺得是最主要的問題) 我改變了快捷方式指向正確的JDK的exe。

一旦完成了這一切。我打開eclipse所有的jdk.tools pom.xml錯誤消失了。

0

我得到了這個問題,事實證明,JBossDevStudio 9.1 Windows是一個32位程序。 Eclipse,因此JBossDevStudio不適用於錯誤類型的JVM。 64位eclipse需要64位JVM,32位eclipse需要32位JVM。因此,將Eclipse配置爲使用我已安裝的64位JDK運行不起作用。

安裝32位JDK和運行Eclipse從解決了這個問題。

至少爲我的項目,一個其他地方我曾試圖在Eclipse項目屬性配置運行JDK之一仍然是斷開的。

2

檢查你的機器上,並在pom.xml中雙方的JDK版本應該是相同的

<dependency> 
     <groupId>com.sun</groupId> 
     <artifactId>tools</artifactId> 
     <version>1.8</version> 
     <scope>system</scope> 
     <systemPath>C:\Program Files\Java\jdk1.8.0_60\lib\tools.jar</systemPath> 
    </dependency> 
相關問題