缺少工件com.sun:tools:jar


90

我一直在遵循入门教程,但是在使用Maven导入playn项目后陷入困境。我正在使用在64位Windows 7上运行的Eclipse Indigo。

所有导入的项目都具有相同的错误:

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,但是为什么有几篇文章我似乎找不到解决方案的共识答案。有人说Sun从64位jdk中删除了一些东西,其他人说您必须编辑xml文件,许多人说您已更改JAVA_HOME,另一些人说您必须更改Eclipse的VM选项。

因为我在这里没有特别奇怪的设置,所以对清除此问题的任何帮助将不胜感激,并且可能对许多人有用。

(编辑)这是第一个项目中的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>

您是否从命令行运行Maven时遇到相同的错误?
拉古拉姆

我添加了pom.xml文件。对于不知道如何使用命令行对maven进行任何操作,我深表歉意。
boldinventions 2011年

POM损坏。缺少强制性标签如的groupId,artifactId的版本...父POM也模块版本,不支持在Maven的中央存在....
马克·奥康纳

您以某种方式解决了吗?这些似乎都不适合我(Windows7-64位-jdk1.6)
Ovidiu Latcu 2012年

由于这是一个常见问题,您能否接受一个对您有用的答案?
Roy Truelove

Answers:


56

我刚刚发布了这个问题这个同样的问题,以及如何解决我的,但我会糊(和扩展),在这里为好,因为它似乎更相关。

在Windows 7中使用Eclipse时,即使从Eclipse设置中的JRE列表中删除了JRE,并且在那里只有JDK,我也遇到了同样的问题。

我最终要做的是(正如您在问题中提到的那样)修改命令行,以用于启动Eclipse的快捷方式中添加-vm参数,如下所示:

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

当然,则需要调整,以点的bin目录你的JDK安装。这是因为Eclipse本身使用JDK而不是JRE运行,因此它能够找到tools.jar正确的位置。

我认为这与Eclipse在未指定默认JRE时如何查找其默认JRE有关。我猜想它倾向于JRE而不是JDK(为什么,我不知道),并寻求它找到的第一个兼容JRE。而且,如Vladiat0r的答案所示,如果它脱离Windows注册表项,它将首先查找HKLM\Software\JavaSoft\Java Runtime Environment密钥而不是HKLM\Software\JavaSoft\Java Development Kit密钥。


10
这在Windows 7中对我们有用。我们必须修改快捷方式以添加-vm“ ...”参数,而不是使用eclipse.ini。另外,我们必须将我们的Maven项目重新导入到工作区中,然后错误才会消失。
Kit Menke

2
此处相同-没有.ini骰子,但cmdline中的-vm arg有效。
罗伊·特鲁伊

1
我编辑了答案,以解释如何更改eclipse.init。资料来源:wiki.eclipse.org/Eclipse.ini#-vm_value
OGrandeDiEnne 2015年

1
同样在这里-向快捷方式添加-vm对我有用。我不必重新导入我的项目,对它进行项目/修改/更新就足够了。
卢卡斯Dumiszewski

1
为了使其正常工作,我还需要添加javaw.exe该路径(因此请完整添加:)-vm "T:\Program Files\Java\jdk1.8.0_66\bin\javaw.exe"
雅各布·范·林根

27

开发一个简单的Web服务应用程序时遇到了同样的麻烦,在我的情况下,我必须添加一个codehous插件才能获得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神器问题

<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>

他们建议包括一个针对工具jar的排除声明,它可以起作用。总结一下:您可以在您的依赖项中包括一个排除规则,避免出现tool.jar问题:

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

3
提示:使用“ MVN依赖项:树”来查找要插入排除项的位置。
Lars

在其中添加排除标签pom.xml对我不起作用。
user3437460

25

我遇到了同样的问题,解决该问题的方法是将的依赖位置添加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文件所在的位置。


42
我强烈建议您不要这样做-它可以解决问题,但不能移植给其他开发人员或构建环境。看到其他答案,他们似乎就能解决问题
Roy Truelove

也许最好将systemPath更改为<systemPath> $ {java.home} /lib/plugin.jar </ systemPath>
Guilherme Santos

stackoverflow.com/questions/3080437/…具有如何以可移植的方式执行此操作。
vorburger '16

我像这样疯狂地更改了pom.xml(强制使用Java-md-doclet的较新版本),错误消失了:<dependencyManagement> <dependencies> <dependency> <groupId> com.github.iotaledger </ groupId> <artifactId> java- md-doclet </ artifactId> <version> 2.1.3 </ version> </ dependency> </ dependencies> </ dependencyManagement>
Samir 007,

19

没有其他答案对我有用。在eclipse中检查pom.xml的“依赖关系层次结构”是什么,在其中给过滤器“工具”显示我对tools.jar有真正的依赖关系:

Eclipse视图

所以对我来说,罪魁祸首是:

<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
为我工作,出现了将Java 6代码库升级到Java 8的问题
jasonoriordan

我已将Spotbugs-maven-plugin确定为罪魁祸首,谢谢!
timbru31

8

我和Windows 7都一样。我最终在以下两行中添加eclipse.ini

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

我尝试%JAVA_HOME%在那里使用,但是没有用。


2
未来我要注意:这必须-vmargs在行之前,因为任何过去的内容都将被解释为VM启动args。所以:就在那之前!
eis 2016年

-vm之前使用此解决方案-vmargs是关键!谢谢!
塔伯

6

我在Eclipse 4.3设置中解决了此问题-仅通过将JDK库添加到JRE的库中。

转到窗口->设置-> Java->已安装的JRE->选择JDK并单击编辑->单击添加外部JAR并添加tools.jar(放在JDK / lib中)


5

检查计算机上的JDK版本,并且pom.xml两者应该相同

<dependency>
    <groupId>sun.jdk</groupId>
    <artifactId>tools</artifactId>
    <version>1.8</version>
    <scope>system</scope>
    <systemPath>C:\Program Files\Java\jdk1.8.0_192\lib\tools.jar</systemPath>
</dependency>

4

如果仍然出现此问题,则可能是因为JDK版本等于或大于11。

tools.jar档案已经从那些JDK的lib文件夹中删除(见这个答案对一个类似问题)。在这种情况下,请尝试使用不依赖该com.sun:tools库的其他版本的库。


3

经过一段时间的努力,我终于可以使用它eclipse.ini而不是使用命令行了。在最终阅读了文档之后,我意识到-vm参数必须在单独的行上,未加引号,并且必须在任何-vmargs之前:

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

2

我也遇到类似的错误。这是因为未在Eclipse中正确设置JDK。黄瓜需要JDK和JRE,因此在pom.xml中添加以下依赖项

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

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

在pom.xml文件中添加此dependecy。希望对您有所帮助。
<systemPath>属性中,您必须编写jdk lib路径。

    <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> 

1

最终使用eclipse.ini修复:

openFile
-vm (Your Java Home JDK here)

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

还必须将JRE更改为JDK:

在Eclipse IDE中转到:

  1. 窗口->首选项->已安装的JRE
  2. 单击添加(找到新的JRE)
  3. 选择标准JVM->下一步
  4. 单击“目录”以找到JRE主页,放入JDK_INSTALL_LOCATION并完成。
  5. 转到Java项目的属性-> Java构建路径->库->选择JRE->编辑->选择工作区默认JRE->完成
  6. 使用project-> clean进行完整的工作区清理。

我们所有的Eclipse IDE的Windows实例都存在此问题。所有基于Ubuntu的Eclipse IDE都不会对我们造成影响。因此,我们在Windows实例上使用了此方法,从而解决了我们的问题。确保在之后添加换行符-vm,将Java SDK路径放在nect行上,并将所有新添加的-vm标志--vmargs放在eclipse.ini文件中的之前。
tom_mai78101

1

正如其他发布者所指出的那样,这里的问题与eclipse无法找到工具jar的JRE有关。我通过与上述不同的方向解决了问题,这是因为我的项目和环境的方式。

Eclipse 4.5至少需要Java 7才能运行,因此我将系统设置为使用C:\ java \ jre1.8.0_45上的Java 8 JRE。

接下来,我正在使用一个POM文件,该文件假定我正在与Java 6 JDK一起运行。

  <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文件,因此我不得不做一些棘手的扑克游戏。我从Java 6 JDK复制了tools.jar,创建了目录C:\ java \ lib并将其粘贴到那里。然后,我重新启动了eclipse并清理了我的项目。VOILA错误消失了。

这不是一个很好的解决方案,我认为正确的解决方案是更改POM的设置方式,但是由于我无法做到,所以这种方法可行。


0

在Windows 7和Eclipse 3.7上,我遇到了相同的问题,我设法通过启动来解决此问题

eclipse.exe -vm“ D:\ JDK6 \ bin”

您可以像这样启动cmd并启动eclipse,也可以编辑快捷方式,然后在-“ target”部分中添加-vm“ D:\ JDK6 \ bin”作为参数。

作为旁注,我还尝试将-vm“ D:\ JDK6 \ bin”添加到eclipse.ini中,但是没有用。而且添加JRE6将不起作用,因为它的“ lib”目录中不包含tools.jar。只有JDK可以。


0

在尝试了上述所有方法之后,我仍然遇到相同的问题。

  • PATH环境变量指向JDK 1.7 \ bin
  • 我的JAVA_HOME环境变量指向了JDK 1.7
  • 我的eclipse.ini具有指向JDK 1.7的javaw -vm条目
  • 我的eclipse首选项将JDK 1.7作为已安装的JRE。
  • 我的项目构建路径是使用JDK 1.7。

然后我尝试了以下方法

  • 打开命令提示符,然后键入java -version。它向我展示了JRE版本1.8。

  • 打开命令提示符,然后转到JDK 1.7 bin目录的位置,然后键入java -version。这次它正确显示为1.7。

然后,在几个地方进行挖掘之后,我发现除了上述位置之外,还有其他Java运行时位置。

登记处

还有一个注册表项,在其中指定了JRE位置

HKLM \软件\ Javasoft \版本

我将此处的条目更改为指向JDK 1.7

程序数据

PATH环境变量中存在目录“ C:\ ProgramData \ Oracle \ Java \ javapath”,其中包含Java,javaw等的快捷方式。这些快捷方式的目标均为JRE 1.8。(我认为这是主要问题)我更改了快捷方式,以指向正确的JDK exe。

一旦所有这些都完成了。我打开eclipse的所有jdk.tools pom.xml错误消失了。


0

我遇到了这个问题,事实证明Windows上的JBossDevStudio 9.1是32位程序。Eclipse以及JBossDevStudio不能在错误的JVM类型上运行。64位Eclipse需要64位JVM,32位Eclipse需要32位JVM。因此,将Eclipse配置为与我安装的64位JDK一起运行是行不通的。

安装32位JDK并从中运行Eclipse解决了该问题。

至少对于我的一个项目,我尝试在Eclipse项目属性中配置运行时JDK的另一个项目仍然存在问题。


0

我通过从系统中卸载JRE并仅保留JDK来解决了该问题。重新安装JDK是不够的,因为Oracle JDK安装程序会同时安装JDK和JRE

顺便说一句,在我看来,这个错误是造成麻烦的原因:Eclipse JRE的java.home代替了build JRE


0

就我而言,我是从Eclipse Run Configurations执行Maven Build。即使将默认的JRE配置更改为指向JDK安装文件夹后,该问题也没有为我解决。原因是在Maven构建-运行配置中有一个JRE选项卡(请参见下图)。而且它仍然指向我的JRE安装。我将其更改为指向JDK安装,然后运行了Maven Build。这次,它奏效了。 在此处输入图片说明


0

让我们了解为什么发生此问题:

$ mvn-版本

Apache Maven 3.6.1(d66c9c0b3152b2e69ee9bac180bb8fcc8e6af555; 2019-04-04T20:00:29 + 01:00)Maven主页:C:\ Program Files \ Apache \ maven-3.6.1 Java版本:1.8.0_221,供应商:Oracle Corporation,运行时:C:\ Program Files \ Java \ jre1.8.0_221默认语言环境:en_GB,平台编码:Cp1252操作系统名称:“ windows 10”,版本:“ 10.0”,拱形:“ amd64”,系列:“ windows”

Maven的“ mvn -version”命令返回上面的输出。

如果您未指定JAVA_HOME环境变量,我们可以看到maven将Java运行时路径获取为“ C:\ Program Files \ Java \ jre1.8.0_221”。然后,maven假定此路径为JAVA_HOME。这就是为什么从命令提示符或任何IDE构建应用程序时,maven在路径“%JAVA_HOME%.. \ lib \ tools.jar”中寻找tools.jar文件的原因。

tools.jar存在于JDK路径中,因此我们需要在使用Maven之前提及它。现在,使用已经可用的jre构建机器,但仅jdk才需要开发。这可能就是Maven自动选择jre路径的原因。

要获得更多帮助,请阅读maven安装路径中提供的代码mvn.cmd。


0

问题是系统找不到文件tools.jar

因此,首先检查目录的JDK安装中是否存在该文件。

在此处输入图片说明

在其他人正确指向的POM.xml中进行以下输入

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

然后也按照以下步骤解决问题

1)右键单击您的项目

2)点击构建路径

根据下图,选择工作区默认的JRE,然后单击完成。

在此处输入图片说明


0

将“首选项”->“ Java”->“已安装的JRE”下的“已安装的JRE”更改为JDK主页对我来说是可行的。

仅供参考-我正在使用JDK 1.8。


-1

如果您使用的是openjdk,则需要安装openjdk-6-sdk软件包。


-1

将相对位置更改为我${java.home}/../lib/tools.jarC:\Program Files\Java\jdk1.6.0_29\lib\tools.jar作品的绝对路径。

您只需要在中进行更改即可playn/pom.xml

现在对于播放样本,Vladiator是正确的,太多的pom文件需要更改。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.