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

Posted

技术标签:

【中文标题】使用 Eclipse / Maven 构建 Hadoop - 缺少工件 jdk.tools:jdk.tools:jar:1.6【英文标题】:Buiding Hadoop with Eclipse / Maven - Missing artifact jdk.tools:jdk.tools:jar:1.6 【发布时间】:2012-06-22 12:02:45 【问题描述】:

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

<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

如何解决?

【问题讨论】:

【参考方案1】:

问题出在 Eclipse Maven 支持中,相关问题是here。

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

要解决这个问题,您需要通过在eclipse.ini之前-vmargs!)中添加类似这样的内容,使用 JDK 中的 JRE 启动 Eclipse:

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

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

【讨论】:

谢谢。只是给读者的一个小注释:记住-vm和实际参数值之间的换行符是必需的。 刚刚在 Eclipse 自动检测[jdk]\jre\bin\javaw.exe 的地方发生了这种情况,当这样运行时,Maven 无法找到 tools.jar。需要显式更改 Eclipse 以使用 [jdk]\bin\javaw.exe 运行,以便 Maven 正确找到它调用的 com.sun:tools:1.8 jar 我必须强调 @Alex 所说的:使用 JDK bin,而不是 eclipse.ini 中 -vm 的 JRE bin。 @rustyx 显示了 [jdk_path]/ jre /bin 的路径,对我来说,这就是导致我找不到 tools.jar 失败的原因——尽管我指向的是 javaw.exe,而不是dll。当我将其更改为 C:/Program Files/Java/jdk1.8.0_51/bin/javaw.exe 并启动 eclipse 时,Alt-F5 错误消失了。我惊讶地发现有两个不同的 javaw 可执行文件,在 JDK 中具有不同的校验和。 如果您指定systemPath properly,即以“../”开头,则不会出现此问题。 Maven 的java.home 变量应该指向JRE,而不是JDK。另一方面,环境变量JAVA_HOME 应该指向JDK。 遇到这个 m2e 错误的 45 人应该在 eclispe 错误跟踪器中投票 - bugs.eclipse.org/bugs/show_bug.cgi?id=432992【参考方案2】:

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 FAQ for adding dependencies to 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>

【讨论】:

可能想补充一点,你的 maven 命令需要从你的 jdk(version 6)/lib 文件夹中运行。 对于windows上的绝对路径:std反斜杠需要替换为fwd斜杠-C:/Program Files/Java/jdk1.7.0_67/lib/tools.jar 这很棒..但是 mvn install 命令让我构建失败..为属性添加引号对我有用.. @abhijitcaps 如果您通过 Program Files 中的完整路径引用 tools.jar,则此路径包含空格并且必须用引号括起来,是的。导航到该目录并从那里运行mvn install:install-file 会更容易;) 尝试 : - - 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【参考方案3】:

感谢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 成功了。

【讨论】:

【参考方案4】:

如果您可以在没有 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>

【讨论】:

【参考方案5】:

这对我有用:

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

【讨论】:

【参考方案6】:

我在我的 MR 项目中使用 below。

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

【讨论】:

这并没有解释把它放在哪里【参考方案7】:

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

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

问题消失了..

【讨论】:

【参考方案8】:

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

现在我下载并安装了JDK 来修复它。

【讨论】:

【参考方案9】:

在 Eclipse 中更改已安装的 JRE 集。 Window > Preferences > Java > Installed JREs,更改 jre 的位置 到 %JAVA_HOME%/jre,但不是 C:\Program Files\Java\jre7

【讨论】:

【参考方案10】:

如果 jdk.tools 存在于 .m2 存储库中。你仍然得到类似这样的错误:

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

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

【讨论】:

【参考方案11】:

试试:

mvn install:install-file -DgroupId=jdk.tools -DartifactId=jdk.tools -Dversion=1.6 -Dpackaging=jar -Dfile="C:\Program Files\Java\jdk\lib\tools.罐子”

还检查: http://maven.apache.org/guides/mini/guide-3rd-party-jars-local.html

【讨论】:

【参考方案12】:

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

    转到 C:\Program Files\Java\jdk1.8.0_40\lib (jdk 版本对你来说可能不同)

    确保 tools.jar 存在(否则下载它)

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

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

    重建并运行!宾果游戏!

【讨论】:

如果你和其他人一起工作,千万不要在你的 pom 中添加它:)

以上是关于使用 Eclipse / Maven 构建 Hadoop - 缺少工件 jdk.tools:jdk.tools:jar:1.6的主要内容,如果未能解决你的问题,请参考以下文章

使用eclipse构建maven和发布maven的项目

如何使用eclipse maven构建hbase开发环境

Eclipse使用Maven构建web项目

如何配置 Eclipse 构建路径以使用 Maven 依赖项?

Maven eclipse 使用Maven deploy命令部署构建到Nexus

使用Eclipse构建Maven项目 (step-by-step)