缺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具有真正的依赖关系:
所以我的罪魁祸首是这样的:
<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中,转到:
- 窗口 – >首选项 – >已安装的JRE
- 点击添加(find新的JRE)
- select标准的JVM – >下一步
- 点击目录findJRE home,放入JDK_INSTALL_LOCATION并完成。
- 转到您的Java项目的属性 – > Java构buildpath – >库 – >selectJRE – >编辑 – >select工作区默认JRE – >完成
- 用项目 – >清理完成一个完整的工作空间清理。
我在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文件要改变。