我一直在关注入门教程,但在使用Maven导入playn项目后卡住了。我正在使用在64位Windows 7上运行的Eclipse Indigo。
所有导入的项目都有相同的错误:
Missing Artifact com.sun:tools:jar in all the pom.xml files.
经过几个小时的搜索论坛后,我尝试过:
安装最新的Java 1.6.029
将我的JAVA_HOME
环境变量更改为指向\program files\Java\jdk1.6_029
更改我的Eclipse Java首选项以使用JRE jdk1.6_029
。
我真的想尝试使用playn,但为什么有一些帖子我似乎找不到解决方案的共识答案。有人说Sun从64位jdk中删除了一些东西,其他人说你必须编辑你的xml文件,很多人说你已经改变了你的JAVA_HOME
,另一些人说你必须改变Eclipse的VM选项。
任何有关清除此功能的帮助都会受到赞赏,并且可能对许多人有用,因为我在这里没有特别奇怪的设置。
(编辑) 这是第一个项目中的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>
答案 0 :(得分:53)
我刚刚在this question上发布了关于同一问题以及我如何解决它的问题,但我也会粘贴(并展开)它,因为它似乎更相关。
在Windows 7中使用Eclipse时遇到了同样的问题,即使我在Eclipse设置中从JRE列表中删除了JRE,并且只是在那里使用了JDK。
我最终必须做的事情(正如您在问题中提到的那样)修改命令行以获取用于启动Eclipse的快捷方式,以便像这样添加-vm参数:
-vm "T:\Program Files\Java\jdk1.6.0_26\bin"
当然,您可以将其调整为指向您的 JDK安装的bin目录。这样做是因为Eclipse本身使用JDK而不是JRE运行,然后它能够正确地找到tools.jar
。
我认为这与Eclipse在没有指定时发现默认JRE的方式有关。我猜它倾向于更喜欢JRE而不是JDK(为什么,我不知道)并且找到它发现的第一个兼容的JRE。如果像Vladiat0r的回答建议那样关闭Windows注册表项,它会首先查找HKLM\Software\JavaSoft\Java Runtime Environment
密钥,而不是HKLM\Software\JavaSoft\Java Development Kit
密钥。
答案 1 :(得分:23)
我遇到了同样的问题,我能够解决它的方法是将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文件所在的位置。
答案 2 :(得分:23)
在开发简单的Web服务应用程序时遇到了同样的问题,在我的情况下,我必须添加一个codehous插件才能获得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>
但是,当您必须部署到生产实例时会发生什么?您可以使用对系统环境变量的引用来替换路径,但这看起来仍然不太好,至少对我而言。
我在StackOverflow评论中找到了另一个解决方案:
<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>
他们建议包含工具罐的排除声明,它可以工作。总结一下:您可以在依赖项中包含排除规则,并避免出现tool.jar问题:
<exclusions>
<exclusion>
<artifactId>tools</artifactId>
<groupId>com.sun</groupId>
</exclusion>
</exclusions>
答案 3 :(得分:13)
其他答案都没有为我做过。检查&#34;依赖层次结构&#34;是什么? eclipse中的pom.xml,它提供了一个过滤器&#39;工具&#39;透露我对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>
排除似乎没有任何缺点。
答案 4 :(得分:6)
我在Eclipse 4.3设置中解决了这个问题 - 只是将JDK库添加到JRE的库中。
Go windows - &gt;设置 - &gt; Java - &gt;已安装的JRE - &gt;选择JDK并单击编辑 - &gt;单击Add External JARs并添加tools.jar(放在JDK / lib中)
答案 5 :(得分:5)
与我和Windows 7相同。我最后在eclipse.ini
添加两行:
-vm
C:\Program Files\Java\jdk1.6.0_35\bin
我尝试在那里使用%JAVA_HOME%
,但它没有用。
答案 6 :(得分:4)
如果仍然出现此问题,则可能是因为JDK版本等于或大于11。
tools.jar
存档已从那些JDK的lib文件夹中删除(请参阅this answer到类似的问题)。
在这种情况下,请尝试使用不依赖com.sun:tools
库的其他版本的库。
答案 7 :(得分:4)
检查您机器上的JDK版本,pom.xml
两者应该相同
<dependency>
<groupId>sun.jdk</groupId>
<artifactId>tools</artifactId>
<version>1.8</version>
<scope>system</scope>
<systemPath>C:\Program Files\Java\jdk1.8.0_192\lib\tools.jar</systemPath>
</dependency>
答案 8 :(得分:3)
经过一段时间的努力,我终于让它与eclipse.ini
而不是命令行一起工作了。在最后阅读documentation后,我意识到-vm参数必须在一个单独的行上,不带引号,并且在任何-vmargs之前:
-vm
C:\Program Files\Java\jdk1.7.0_45\bin\javaw.exe
答案 9 :(得分:2)
我也遇到了同样的问题
可能是由于这些中的任何一个 -->
答案 10 :(得分:1)
在pom文件的有效POM选项卡中,我看到以下派生路径:
C:\Program Files\Java\jre6/../lib/tools.jar
我认为它不是Windows中的有效路径。我尝试在jre6 / lib文件夹以及Java / lib中复制tools.jar但没有成功。
值“C:\ Program Files \ Java \ jre6”来自注册表
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系统环境变量没有帮助。
我见过的另一种选择是在每个pom xml文件中添加具有正确路径的依赖项,但是playn-samples有很多文件,这是一个非常痛苦的编辑。
这是有效的POM结果,显示了错误的路径!
<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>
答案 11 :(得分:1)
如果在新安装/升级的操作系统上看到此错误,那是因为JAVA_HOME设置不正确。
我们需要正确设置JAVA_HOME。例如在Mac上: 如果我想使用Java版本1.8.0_261
export JAVA_HOME=`/usr/libexec/java_home -v 1.8.0_261`
答案 12 :(得分:1)
我得到了类似的错误。 这是因为在Eclipse中没有正确设置JDK。 Cucumber需要JDK和JRE,因此在pom.xml中添加以下依赖项
<dependency>
<groupId>com.sun</groupId>
<artifactId>tools</artifactId>
<version>1.6</version>
<scope>system</scope>
<systemPath>C:\Program Files\Java\jdk1.8.0_101\lib\tools.jar</systemPath>
</dependency>
答案 13 :(得分:1)
正如其他海报所述,这里的问题与日食所使用的JRE有关,因为它无法找到工具罐。我解决了这个问题的方向与上面提到的方向不同,这是因为我的项目和环境的方式。
Eclipse 4.5至少需要Java 7 for runtime,所以我的系统设置是使用位于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文件,所以我不得不做一些jiggery pokery。我从我的Java 6 JDK复制了tools.jar,创建了目录C:\ java \ lib并将其粘贴到那里。然后我重新启动了eclipse并清理了我的项目。而VOILA错误消失了。
这不是一个优雅的解决方案,我认为正确的解决方案是改变POM的设置方式,但正如我无法做到的那样,这是有效的。
答案 14 :(得分:1)
在pom.xml文件中添加此依赖项。希望这有帮助。
在<systemPath>
属性中,您必须编写jdk lib路径..
<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>
答案 15 :(得分:0)
在完成上述所有操作后,我仍然遇到同样的问题。
然后我尝试了以下内容,
打开命令提示符并键入java -version。它向我展示了JRE版本1.8。
打开命令提示符并转到JDK 1.7 bin目录的位置并键入java -version。这次正确显示1.7。
然后在几个地方挖掘后,我发现除了上述位置之外,Java运行时还有其他位置。
<强>注册表强>
还有一个注册表项,其中JRE位置在
下指定HKLM \ SOFTWARE \ JavaSoft的\版
我在这里更改了条目以指向JDK 1.7
<强> ProgramData 强>
目录“C:\ ProgramData \ Oracle \ Java \ javapath”出现在PATH环境变量中,包含java,javaw等的快捷方式...... 这些快捷方式的目标都是JRE 1.8。 (我认为这是主要问题) 我更改了快捷方式以指向正确的JDK exe。
一旦完成所有这些。我打开eclipse所有的jdk.tools pom.xml错误都消失了。
答案 16 :(得分:0)
我遇到了这个问题,结果证明Windows上的JBossDevStudio 9.1是一个32位程序。 Eclipse以及JBossDevStudio不适用于错误类型的JVM。 64位eclipse需要一个64位JVM,32位eclipse需要一个32位JVM。因此,将Eclipse配置为使用我安装的64位JDK运行不起作用。
安装32位JDK并从中运行Eclipse解决了这个问题。
至少在我的一个项目中,我尝试在Eclipse项目属性中配置运行时JDK的另一个项目仍然存在。
答案 17 :(得分:0)
使用eclipse.ini修复结束:
openFile
-vm (Your Java Home JDK here)
例如,-vm C:\Java\JDK\1.6
。
还必须将JRE更改为JDK:
在Eclipse IDE中转到:
答案 18 :(得分:0)
我通过从系统中卸载JRE并仅离开JDK解决了这个问题。重新安装JDK是不够的,因为Oracle JDK安装程序同时安装了JDK和JRE
顺便说一句,在我看来,这个错误导致了麻烦:java.home of the Eclipse JRE is used instead of the build JRE答案 19 :(得分:0)
就我而言,我正在从Eclipse Run Configurations执行Maven Build。即使在将默认JRE配置更改为指向JDK安装文件夹之后,该问题也没有得到修复。原因是Maven Build - Run Configuration中有一个JRE选项卡(见下图)。它仍然指向我的JRE安装。我将其更改为指向JDK安装,然后运行Maven Build。这次,它奏效了。 enter image description here
答案 20 :(得分:0)
让我们了解为什么发生此问题:
$ mvn -version
Apache Maven 3.6.1(d66c9c0b3152b2e69ee9bac180bb8fcc8e6af555; 2019-04-04T20:00:29 + 01:00) Maven主页:C:\ Program Files \ Apache \ maven-3.6.1 Java版本:1.8.0_221,供应商:Oracle Corporation,运行时:C:\ Program Files \ Java \ jre1.8.0_221 默认语言环境:en_GB,平台编码:Cp1252 操作系统名称:“ windows 10”,版本:“ 10.0”,拱门:“ amd64”,家族:“ windows”
Maven“ mvn -version”命令返回以上输出。
如果您未指定JAVA_HOME环境变量,我们可以看到maven将Java运行时路径获取为“ C:\ Program Files \ Java \ jre1.8.0_221”。然后,maven假定此路径为JAVA_HOME。这就是为什么从命令提示符或任何IDE构建应用程序时,maven会在路径“%JAVA_HOME%.. \ lib \ tools.jar”中寻找tools.jar文件的原因。
tools.jar存在于JDK路径中,因此我们需要在使用Maven之前提及它。现在,使用已经可用的jre构建机器,但是jdk仅用于开发。这可能就是Maven自动选择jre路径的原因。
有关更多帮助,请阅读maven安装路径中提供的代码mvn.cmd。
答案 21 :(得分:0)
问题是系统无法找到文件 tools.jar
因此,首先请检查该文件是否在目录的 JDK安装中。
使 POM.xml 中的以下条目正确指向其他人
<dependency>
<groupId>com.sun</groupId>
<artifactId>tools</artifactId>
<version>1.6</version>
<scope>system</scope>
<systemPath>C:\Program Files\Java\jdk1.8.0_241\lib\tools.jar</systemPath>
</dependency>
然后按照以下步骤操作以解决问题
1)右键单击您的项目
2)单击构建路径
根据下图,选择工作区默认的JRE,然后单击完成。
答案 22 :(得分:0)
我在Windows 7和Eclipse 3.7上遇到了同样的问题 我设法通过启动来修复它
eclipse.exe -vm“D:\ JDK6 \ bin”
你可以启动一个cmd并启动这样的eclipse,或者你可以编辑你的快捷方式并在“目标部分”中添加-vm“D:\ JDK6 \ bin”作为参数。
作为旁注,我还试图将-vm“D:\ JDK6 \ bin”添加到eclipse.ini但是没有用。 添加JRE6将无法正常工作,因为它的“lib”目录中不包含tools.jar。只有JDK。
答案 23 :(得分:0)
我相信这些本地补丁会起作用。然而,这些可能会导致下游部署问题。我只是下载了一个带有 Java 11 的新版本 Eclipse,现在一切正常。
答案 24 :(得分:0)
JAVA_HOME
变量必须指向 Java 11+ 安装。mvn
shell 脚本(Windows 上的 mvn.bat
或 mvn.cmd
)并将 JAVA_HOME
设置为指向 JDK 8 安装。@REM ==== START VALIDATION ==== set JAVA_HOME=C:\Program Files\Java\jdk1.8.0_161
答案 25 :(得分:-1)
如果您使用的是openjdk,则需要安装openjdk-6-sdk软件包。
答案 26 :(得分:-1)
更改${java.home}/../lib/tools.jar
与绝对路径的相对位置
C:\Program Files\Java\jdk1.6.0_29\lib\tools.jar
对我有用。
您只需在playn/pom.xml
。
现在对于playn-samples,Vladiator是对的,那太多的pom文件无法改变。