缺less神器com.sun:工具:jar

我一直在使用入门教程,但是在使用Maven导入playn项目之后,我一直陷入困境。 我正在使用在64位Windows 7上运行的Eclipse Indigo。

所有导入的项目都有相同的错误:

Missing Artifact com.sun:tools:jar in all the pom.xml files. 

经过几个小时的search论坛,我试过了:

安装最新的Java 1.6.029将我的JAVA_HOME环境variables更改为\program files\Java\jdk1.6_029更改我的Eclipse Java首选项以使用JRE jdk1.6_029

我真的想试试playn,但为什么有几个post,我似乎无法find解决schemeconsenus答案。 有人说,Sun从64位jdk中删除了一些东西,其他人说你必须编辑你的xml文件,很多人说你已经改变了你的JAVA_HOME ,另一个人说你必须改变你的Eclipse的虚拟机选项。

任何帮助清理这一点,将不胜感激,并可能有用的很多,因为我没有一个特别奇怪的设置在这里。

(编辑)这是第一个项目中的pom.xml。 Eclipse中的标志错误在说:

 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>com.googlecode.playn</groupId> <artifactId>playn-project</artifactId> <version>1.1-SNAPSHOT</version> </parent> <artifactId>playn-android</artifactId> <name>PlayN Android</name> <packaging>jar</packaging> <repositories> </repositories> <dependencies> <dependency> <groupId>com.googlecode.playn</groupId> <artifactId>playn-core</artifactId> <version>${project.version}</version> </dependency> <!-- needed because Android uses the same JSON code as playn-java; that should be factored into a library shared by both backends --> <dependency> <groupId>com.googlecode.playn</groupId> <artifactId>playn-java</artifactId> <version>${project.version}</version> </dependency> <dependency> <groupId>com.google.android</groupId> <artifactId>android</artifactId> <version>${android.version}</version> <scope>provided</scope> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.8.1</version> <scope>test</scope> </dependency> </dependencies> <build> <sourceDirectory>src</sourceDirectory> </build> </project> 

我刚刚在这个问题上贴出了关于这个问题的解决方法,但是我也会在这里粘贴(并扩展)它,因为它看起来更相关。

在Windows 7中使用Eclipse时,即使从Eclipse设置中的JRE列表中删除了JRE,并且只有JDK,也是如此。

我最后必须做的(就像你在你的问题中提到的那样)修改了我用来启动Eclipse的快捷方式的命令行,以便像这样添加-vm参数:

 -vm "T:\Program Files\Java\jdk1.6.0_26\bin" 

当然,您可以将其调整为指向JDK安装的bin目录。 这样做会导致Eclipse自身使用JDK而不是JRE来运行,然后它能够​​正确地findtools.jar

我相信这与Eclipse如何find它的默认JRE时没有指定。 我猜测它倾向于selectJRE而不是JDK(为什么,我不知道),并find它find的第一个兼容的JRE。 而且,如果是像Vladiat0r的答案所示的Windowsregistry键,它将首先查找HKLM\Software\JavaSoft\Java Runtime Environment键,而不是HKLM\Software\JavaSoft\Java Development Kit键。

我遇到了同样的问题,我能够解决的方法是将tools.jar的依赖位置添加到pom.xml 。 像这样:

  <dependency> <groupId>com.sun</groupId> <artifactId>tools</artifactId> <version>1.6</version> <scope>system</scope> <systemPath>C:\Program Files\Java\jdk1.6.0_29\lib\tools.jar</systemPath> </dependency> 

确保将<systemPath>更改为tools.jar文件所在的位置。

在开发一个简单的Web服务应用程序时,我遇到了同样的麻烦,在我的情况下,我不得不添加一个代码插件来获取jaxws库。 但是,maven pom一直在问关于jar文件的工具。

我不得不说上面的评论是正确的,你可以在pom文件中包含以下条目:

 <dependency> <groupId>com.sun</groupId> <artifactId>tools</artifactId> <version>1.6</version> <scope>system</scope> <systemPath>C:\Program Files\Java\jdk1.6.0_29\lib\tools.jar</systemPath> </dependency> 

但是,当您必须部署到生产实例时会发生什么? 你可以用一个系统环境variables的引用来代替path,但是这样看起来还是不太好,至less对我来说是这样。

我在StackOverflow评论中发现了另一个解决scheme:

Maven 3神器问题

 <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-core</artifactId> <version>${struts2.version}</version> <exclusions> <exclusion> <artifactId>tools</artifactId> <groupId>com.sun</groupId> </exclusion> </exclusions> </dependency> 

他们build议在工具包中包含一个排除语句,它可以工作。 所以总结一下:你可以在你的依赖中包含一个排除规则,并避免产生tool.jar问题:

  <exclusions> <exclusion> <artifactId>tools</artifactId> <groupId>com.sun</groupId> </exclusion> </exclusions> 

没有其他答案为我做了。 在eclipse中检查pom.xml的“Dependency hierarchy”是什么,在那里给出一个filter“工具”,显示出我对tools.jar具有真正的依赖关系:

Eclipse视图

所以我的罪魁祸首是这样的:

 <dependency> <groupId>com.github.markusbernhardt</groupId> <artifactId>robotframework-selenium2library-java</artifactId> <version>1.4.0.7</version> <scope>test</scope> </dependency> 

添加一个排除固定它:

 <dependency> <groupId>com.github.markusbernhardt</groupId> <artifactId>robotframework-selenium2library-java</artifactId> <version>1.4.0.7</version> <scope>test</scope> <exclusions> <exclusion> <artifactId>tools</artifactId> <groupId>com.sun</groupId> </exclusion> </exclusions> </dependency> 

排除似乎没有任何缺点。

我在Eclipse 4.3的设置中解决了这个问题 – 只能通过将JDK库添加到JRE的库中。

转到Windows – >设置 – > Java – >已安装的JRE – >selectJDK并单击编辑 – >单击添加外部JAR并添加tools.jar(位于JDK / lib中)

与我和Windows 7一样。我最后添加了两行到eclipse.ini

 -vm C:\Program Files\Java\jdk1.6.0_35\bin 

我尝试使用%JAVA_HOME% ,但它没有工作。

经过一段时间的努力后,我终于得到这个eclipse.ini而不是命令行。 在阅读完文档后,我意识到-vm参数必须放在一个单独的行中,不加引号,并且在任何-vmargs之前:

 -vm C:\Program Files\Java\jdk1.7.0_45\bin\javaw.exe 

在POM文件的有效POM选项卡中,我看到下面的派生path: C:\Program Files\Java\jre6/../lib/tools.jar ,我认为这不是Windows中的有效path。 我试图在jre6 / lib文件夹以及Java / lib中复制tools.jar而没有成功。

值“C:\ Program Files \ Java \ jre6”来自registry

 HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment\1.6.0_30 HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment\1.6 

并将JavaHome密钥设置为您的jdk JRE的安装位置。 然后所有的编译器错误消失了。

重新安装JDK没有解决它。 设置JAVA_HOME或java.home系统环境variables没有帮助。

我见过的另一种方法是在每个pom xml文件中添加依赖关系,但playn-samples中有很多文件,这些文件是必须编辑的荒谬的痛苦。

这是有效的POM结果,显示了错误的path!

  <dependency> <groupId>com.sun</groupId> <artifactId>tools</artifactId> <version>1.6</version> <scope>system</scope> <systemPath>C:\Program Files\Java\jre6/../lib/tools.jar</systemPath> <optional>true</optional> </dependency> 

在pom.xml文件中添加这个依赖。 希望这个帮助。
<systemPath>属性中,您必须编写您的jdk库path。

  <dependency> <groupId>com.sun</groupId> <artifactId>tools</artifactId> <version>1.4.2</version> <scope>system</scope> <systemPath>C:/Program Files/Java/jdk1.6.0_30/lib/tools.jar</systemPath> </dependency> 

检查你的机器和pom.xml中的jdk版本应该是相同的

 <dependency> <groupId>com.sun</groupId> <artifactId>tools</artifactId> <version>1.8</version> <scope>system</scope> <systemPath>C:\Program Files\Java\jdk1.8.0_60\lib\tools.jar</systemPath> </dependency> 

结束使用eclipse.ini修复:

 openFile -vm (Your Java Home JDK here) 

例如, -vm C:\Java\JDK\1.6

还必须将JRE更改为JDK:

在Eclipse IDE中,转到:

  1. 窗口 – >首选项 – >已安装的JRE
  2. 点击添加(find新的JRE)
  3. select标准的JVM – >下一步
  4. 点击目录findJRE home,放入JDK_INSTALL_LOCATION并完成。
  5. 转到您的Java项目的属性 – > Java构buildpath – >库 – >selectJRE – >编辑 – >select工作区默认JRE – >完成
  6. 用项目 – >清理完成一个完整的工作空间清理。

我在Windows 7和Eclipse 3.7上遇到了同样的问题,我试图通过启动来修复它

eclipse.exe -vm“D:\ JDK6 \ bin”

你可以像这样启动一个cmd并启动eclipse,或者你可以编辑你的快捷方式,并在“target section”中添加-vm“D:\ JDK6 \ bin”作为参数。

作为一个旁注,我也尝试添加-vm“D:\ JDK6 \ bin”到eclipse.ini但是没有工作。 而且添加JRE6将不起作用,因为它不包含tools.jar在它的“lib”目录中。 只有JDK。

正如其他海报所说,这里的问题与日食所使用的JRE无法find工具jar有关。 我的解决scheme与上面所说的方向有所不同,这是因为我的项目和环境。

Eclipse 4.5在运行时至less需要Java 7,所以我的系统设置使用位于C:\ java \ jre1.8.0_45的Java 8 JRE。

接下来,我使用一个POM文件,假定我正在运行Java 6 JDK。

  <profiles> <profile> <id>default-profile</id> <activation> <activeByDefault>true</activeByDefault> <file> <exists>${java.home}/../lib/tools.jar</exists> </file> </activation> <properties> <toolsjar>${java.home}/../lib/tools.jar</toolsjar> </properties> </profile> <profile> <id>osx_profile</id> <activation> <activeByDefault>false</activeByDefault> <os> <family>mac</family> </os> </activation> <properties> <toolsjar>${java.home}/../Classes/classes.jar</toolsjar> </properties> </profile> </profiles> <dependencies> <dependency> <groupId>com.sun</groupId> <artifactId>tools</artifactId> <version>1.6.0</version> <scope>system</scope> <systemPath>${toolsjar}</systemPath> </dependency> </dependencies> 

我不能更改POM文件,所以我不得不做一些小动作。 我从我的Java 6 JDK中复制了tools.jar,创build了C:\ java \ lib目录并粘贴到那里。 然后我重新启动日食,并清理我的项目。 VOILA错误消失了。

这不是一个优雅的解决scheme,我认为正确的解决scheme是改变POM的设置方式,但是我没有办法,这是有效的。

在尝试完所有上述之后,我仍然有同样的问题。

  • PATH环境variables指向JDK 1.7 \ bin
  • 我的JAVA_HOME环境variables被指向JDK 1.7
  • 我的eclipse.ini具有指向JDK 1.7的javaw -vm条目
  • 我的日食偏好JDK 1.7作为安装的JRE。
  • 我的项目构buildpath是使用JDK 1.7。

然后我尝试了以下,

  • 打开命令提示符并键入java -version。 它给我看了一个JRE版本1.8。

  • 打开命令提示符并转到JDK 1.7 bin目录的位置并键入java -version。 这次它正确地显示了1.7。

然后在挖掘了几个地方之后,我发现除了上述位置之外,Java运行时还有其他位置。

注册处

还有一个registry项,其中指定JRE位置

HKLM \ SOFTWARE \ JavaSoft的\版本

我把这里的条目改为指向JDK 1.7

ProgramData

目录“C:\ ProgramData \ Oracle \ Java \ javapath”存在于PATH环境variables中,包含java,javaw等的快捷方式…这些快捷方式的目标都是JRE 1.8。 ( 我认为这是主要问题 )我改变了快捷方式指向正确的JDK EXE的。

一旦完成这一切。 我打开eclipse所有的jdk.tools pom.xml错误消失了。

我得到这个问题,事实certificate,Windows上的JBossDevStudio 9.1是一个32位程序。 Eclipse,因此JBossDevStudio,不适用于错误types的JVM。 64位eclipse需要一个64位的JVM,32位的eclipse需要一个32位的JVM。 因此,将Eclipseconfiguration为使用我已安装的64位JDK运行不起作用。

安装一个32位JDK并从中运行Eclipse解决了这个问题。

至less对于我的项目之一,另一个我试图在Eclipse项目属性中configuration运行时JDK的地方仍然存在问题。

我解决了这个问题,从我的系统中卸载了JRE并且仅仅离开了JDK。 重新安装JDK是不够的,因为Oracle JDK安装程序同时安装了JDK和JRE

顺便说一句,在我看来,这个bug是负责麻烦: 使用Eclipse JRE的java.home而不是构buildJRE

如果您使用的是openjdk,那么您需要安装openjdk-6-sdk软件包。

${java.home}/../lib/tools.jar的相对位置更改为C:\Program Files\Java\jdk1.6.0_29\lib\tools.jar的绝对path。

你只需要在playn/pom.xml改变它。

现在对于playn-samples,Vladiator是正确的,这是太多的POM文件要改变。