使用Eclipse / Maven构建Hadoop-缺少工件jdk.tools:jdk.tools:jar:1.6


74

我正在尝试在eclipse 3.81,m2e插件的maven项目中从cdh4 maven repo导入cloudera的org.apache.hadoop:hadoop-client:2.0.0-cdh4.0.0 ,使用在Win7上使用oracle jdk 1.7.0_05的Eclipse Maven项目

<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-client</artifactId>
    <version>2.0.0-cdh4.0.0</version>
</dependency>

但是,出现以下错误:

The container 'Maven Dependencies' references non existing library 'C:\Users\MyUserId\.m2\repository\jdk\tools\jdk.tools\1.6\jdk.tools-1.6.jar'

更具体地说,maven指出缺少以下工件

Missing artifact jdk.tools:jdk.tools:jar:1.6

如何解决呢?

Answers:


95

jdk.tools:jdk.tools(或com.sun:tools,或随便命名)是随JDK一起分发的JAR文件。通常,您将其添加到Maven项目中,如下所示:

<dependency>
    <groupId>jdk.tools</groupId>
    <artifactId>jdk.tools</artifactId>
    <scope>system</scope>
    <systemPath>${java.home}/../lib/tools.jar</systemPath>
</dependency>

请参阅Maven常见问题解答,以将依赖项添加到tools.jar

或者,您可以tools.jar使用以下方法在本地存储库中手动安装:

mvn install:install-file -DgroupId=jdk.tools -DartifactId=jdk.tools -Dpackaging=jar -Dversion=1.6 -Dfile=tools.jar -DgeneratePom=true

然后像Cloudera一样引用它,使用:

<dependency>
    <groupId>jdk.tools</groupId>
    <artifactId>jdk.tools</artifactId>
    <version>1.6</version>
</dependency>

7
可能想补充一点,需要从jdk(version 6)/ lib文件夹运行您的maven命令。
Dan W

1
对于Windows上的绝对路径:std反斜杠需要替换为fwd斜杠-C:/ Program Files / Java / jdk1.7.0_67 / lib / tools.jar
用户923227 2015年

太好了。.但是mvn install命令给我构建失败。.为属性添加引号对我
有用

2
@abhijitcaps如果您是tools.jar通过Program Files中的完整路径引用的,则该路径包含空格,必须用引号引起来,是的。导航到该目录并mvn install:install-file从那里运行会更容易;)
npe 2015年

尝试:--mvn install:install-file -DgroupId = jdk.tools -DartifactId = jdk.tools -Dversion = 1.6 -Dpackaging = jar -Dfile =“ C:\ Program Files \ Java \ jdk \ lib \ tools.jar”或检查 maven.apache.org/guides/mini/guide-3rd-party-jars-local.html
约杰什Borkhade

103

问题在Eclipse Maven支持中,相关问题在这里

在Eclipse下,该java.home变量设置为用于启动Eclipse的JRE,而不是构建JRE。的默认系统JREC:\Program Files不包含JDK,因此tools.jar未找到。

要解决此问题,您需要使用JDK中的JRE,通过向eclipse.inibefore -vmargs!)添加类似内容来启动Eclipse :

-vm
C:/<your_path_to_jdk170>/jre/bin/server/jvm.dll

然后刷新Maven依赖项(Alt-F5)(仅刷新项目还不够)。


9
谢谢。对读者来说,这只是一小段评论:请记住,必须在之间-vm和实际参数值之间输入换行符。
DanielFernández2014年

1
只是在Eclipse自动检测到的情况下发生过这种情况[jdk]\jre\bin\javaw.exe,并且当以这种方式运行时,Maven无法找到tools.jar。需要显式更改Eclipse以使其运行,以[jdk]\bin\javaw.exe使Maven能够正确找到它所说的com.sun:tools:1.8罐子
Alex

1
我必须强调@Alex所说的:-vm在eclipse.ini中使用JDK bin,而不是JRE bin 。@rustyx显示显示[jdk_path] / jre / bin的路径,对我来说,这就是导致我找不到tools.jar失败的原因-尽管我指向的是javaw.exe,而不是dll。当我将其更改为C:/Program Files/Java/jdk1.8.0_51/bin/javaw.exe 并开始蚀时,Alt-F5和错误消失了。我惊讶地发现JDK中有两个不同的javaw可执行文件,它们的校验和不同。
大卫·洛茨

1
如果您指定systemPath 正确,即以“ ../”开头,则不会出现此问题。Maven的java.home变量应指向JRE而不是JDK。JAVA_HOME另一方面,环境变量应指向JDK。
rustyx

遇到此m2e错误的45个人应该在eclispe错误跟踪器中对其进行投票-bugs.eclipse.org/bugs/show_bug.cgi?id=432992
icyitscold 2015年

37

感谢npe,添加

<dependency>
    <groupId>jdk.tools</groupId>
    <artifactId>jdk.tools</artifactId>
    <version>1.7.0_05</version>
    <scope>system</scope>
    <systemPath>${JAVA_HOME}/lib/tools.jar</systemPath>
</dependency>

到pom.xml做到了。


10

如果您可以在没有tools.jar的情况下生存并且仅将其作为链式依赖项包含在内,则可以将其从有问题的项目中排除:

<dependency>
    <groupId>org.apache.ambari</groupId>
    <artifactId>ambari-metrics-common</artifactId>
    <version>2.1.0.0</version>
    <exclusions>
        <exclusion>
            <artifactId>jdk.tools</artifactId>
            <groupId>jdk.tools</groupId>
        </exclusion>
    </exclusions>
</dependency>

6

这对我有用:

    <dependency>
        <groupId>jdk.tools</groupId>
        <artifactId>jdk.tools</artifactId>
        <version>1.7.0_05</version>
        <scope>system</scope>
        <systemPath>${JAVA_HOME}/lib/tools.jar</systemPath>
    </dependency>

1

我在MR项目中使用以下内容。

<exclusions>
                <exclusion>
                    <artifactId>jdk.tools</artifactId>
                    <groupId>jdk.tools</groupId>
                </exclusion>
</exclusions>

这并不能解释该放在哪里
MikeKulls

0

也许是系统安装的jdk软件包,但也许是一些开发工具或插件。

我在opensuse env下发现了这个问题。然后我安装java-1_6_0-openjdk-devel

问题消失了。


0

我也遇到了这个问题,因为我只安装了JRE而不是JDK。因此,为jdk.tools添加依赖无法解决我的问题,因为在我的$ {JAVA_HOME} / lib /目录中不存在tools.jar

现在,我下载并安装了JDK 进行修复。


0

在您的日食中更改已安装的JRE的集合。窗口>首选项> Java>已安装的JRE,将jre的位置更改为%JAVA_HOME%/ jre,但不要将其更改为C:\ Program Files \ Java \ jre7


0

如果.m2存储库中存在jdk.tools。仍然会收到类似以下的错误:

缺少的工件:jdk.tools ..... c:... / jre / ..

在buildpath-> configure build path-> Libraries中,只需将JRE系统库从JRE更改为JDK。



-3

好的,如果您使用的是Windows操作系统

  1. 转到C:\ Program Files \ Java \ jdk1.8.0_40 \ lib(jdk版本可能与您不同)

  2. 确保存在tools.jar(否则将其下载)

  3. 复制此路径“ C:\ Program Files \ Java \ jdk1.8.0_40”

  4. 在pom.xml中

    <dependency>
    <groupId>jdk.tools</groupId>
    <artifactId>jdk.tools</artifactId>
    <version>1.8.0_40</version>
    <scope>system</scope>
    <systemPath>C:/Program Files/Java/jdk1.8.0_40/lib/tools.jar</systemPath>
    </dependency>
    
  5. 重建并运行!答对了!


5
如果您与其他人一起工作,切勿在您的pom中添加它:)
Alex
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.