【问题标题】:Buiding Hadoop with Eclipse / Maven - Missing artifact jdk.tools:jdk.tools:jar:1.6使用 Eclipse / Maven 构建 Hadoop - 缺少工件 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

如何解决?

【问题讨论】:

    标签: java maven maven-2 hadoop cloudera


    【解决方案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 操作系统

                    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. 重建并运行!宾果游戏!

                    【讨论】:

                    • 如果你和其他人一起工作,千万不要在你的 pom 中添加它:)
                    猜你喜欢
                    • 2015-05-25
                    • 2012-01-31
                    • 1970-01-01
                    • 2019-07-20
                    • 1970-01-01
                    • 1970-01-01
                    • 2014-01-04
                    • 2013-07-12
                    • 1970-01-01
                    相关资源
                    最近更新 更多