使用 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 依赖项?