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

jva*_*man 73 java maven-2 hadoop maven cloudera

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

<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-client</artifactId>
    <version>2.0.0-cdh4.0.0</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

但是,我收到以下错误:

The container 'Maven Dependencies' references non existing library 'C:\Users\MyUserId\.m2\repository\jdk\tools\jdk.tools\1.6\jdk.tools-1.6.jar'
Run Code Online (Sandbox Code Playgroud)

更具体的是,maven声明缺少以下工件

Missing artifact jdk.tools:jdk.tools:jar:1.6
Run Code Online (Sandbox Code Playgroud)

怎么解决这个?

rus*_*tyx 101

问题出在Eclipse Maven的支持上,相关问题就在这里.

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

要解决此问题,您需要使用JDK中的JRE启动Eclipse,方法是将此类内容添加到eclipse.ini(之前 -vmargs!):

-vm
C:/<your_path_to_jdk170>/jre/bin/server/jvm.dll
Run Code Online (Sandbox Code Playgroud)

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

  • 谢谢.对读者来说只是一个小评论:请记住`-vm`和实际参数值之间的换行符是必需的. (8认同)

npe*_*npe 92

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>
Run Code Online (Sandbox Code Playgroud)

请参阅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
Run Code Online (Sandbox Code Playgroud)

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

<dependency>
    <groupId>jdk.tools</groupId>
    <artifactId>jdk.tools</artifactId>
    <version>1.6</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

  • 可能想要添加你的maven命令需要从你的jdk(版本6)/ lib文件夹运行. (7认同)
  • @abhijitcaps如果您通过Program Files中的完整路径引用`tools.jar`,则该路径包含空格,必须用引号引起来,是的。导航到该目录并从那里运行`mvn install:install-file`更容易;) (2认同)

jva*_*man 36

感谢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>
Run Code Online (Sandbox Code Playgroud)

到pom.xml就可以了.


Ada*_*nge 8

如果你可以在没有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>
Run Code Online (Sandbox Code Playgroud)


小智 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>
Run Code Online (Sandbox Code Playgroud)