我一直在关注入门教程,但在使用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>
我刚刚在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
键。
在pom.xml文件中添加此依赖项。希望这有帮助。 在qazxsw poi属性中,你必须编写你的jdk lib路径..
<systemPath>
正如其他海报所述,这里的问题与日食所使用的JRE有关,因为它无法找到工具罐。我解决了这个问题的方向与上面提到的方向不同,这是因为我的项目和环境的方式。
Eclipse 4.5至少需要Java 7 for runtime,所以我的系统设置使用位于C:\ java \ jre1.8.0_45的Java 8 JRE。
接下来,我正在使用一个假定我正在使用Java 6 JDK运行的POM文件。
<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文件,所以我不得不做一些jiggery pokery。我从我的Java 6 JDK复制了tools.jar,创建了目录C:\ java \ lib并将其粘贴到那里。然后我重新启动了eclipse并清理了我的项目。而VOILA错误消失了。
这不是一个优雅的解决方案,我认为正确的解决方案是改变POM的设置方式,但正如我无法做到的那样,这是有效的。
我得到了类似的错误。这是因为在Eclipse中没有正确设置JDK。 Cucumber需要JDK和JRE,因此在pom.xml中添加以下依赖项
<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>
使用eclipse.ini修复结束:
<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>
例如,openFile
-vm (Your Java Home JDK here)
。
不得不将JRE更改为JDK:
在Eclipse IDE中转到:
我在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才有。
在尝试了以上所有内容后,我仍然遇到了同样的问题。
然后我尝试了以下,
然后在几个地方挖掘后,我发现除了上述位置之外,Java运行时还有其他位置。
注册处
还有一个注册表项,其中指定了JRE位置
HKLM \ SOFTWARE \ JavaSoft的\版本
我在这里更改了条目以指向JDK 1.7
ProgramData
目录“C:\ ProgramData \ Oracle \ Java \ javapath”存在于PATH环境变量中,包含java,java等的快捷方式......这些快捷方式的目标都是JRE 1.8。 (我认为这是主要问题)我改变了快捷方式以指向正确的JDK exe。
一旦完成所有这些。我打开eclipse所有的jdk.tools pom.xml错误都消失了。
我遇到了这个问题,结果证明Windows上的JBossDevStudio 9.1是一个32位程序。 Eclipse以及JBossDevStudio不适用于错误类型的JVM。 64位eclipse需要一个64位JVM,32位eclipse需要一个32位JVM。因此,将Eclipse配置为使用我安装的64位JDK运行不起作用。
安装32位JDK并从中运行Eclipse解决了这个问题。
至少在我的一个项目中,我试图在Eclipse项目属性中配置运行时JDK的另一个项目仍然存在。
我通过从系统中卸载JRE并仅离开JDK解决了这个问题。重新安装JDK是不够的,因为Oracle JDK安装程序同时安装了JDK和JRE
顺便说一句,在我看来,这个bug是造成麻烦的原因:-vm C:\Java\JDK\1.6
就我而言,我正在从Eclipse Run Configurations执行Maven Build。即使在将默认JRE配置更改为指向JDK安装文件夹之后,问题也没有得到解决。原因是Maven Build - Run Configuration中有一个JRE选项卡(见下图)。它仍然指向我的JRE安装。我将其更改为指向JDK安装,然后运行Maven Build。这次,它奏效了。 java.home of the Eclipse JRE is used instead of the build JRE
让我们理解为什么会出现这个问题:
$ mvn -version
Apache Maven 3.6.1(d66c9c0b3152b2e69ee9bac180bb8fcc8e6af555; 2019-04-04T20:00:29 + 01:00)Maven home:C:\ Program Files \ Apache \ maven-3.6.1 Java版本:1.8.0_221,供应商:Oracle Corporation, runtime:C:\ Program Files \ Java \ jre1.8.0_221默认语言环境:en_GB,平台编码:Cp1252操作系统名称:“windows 10”,版本:“10.0”,arch:“amd64”,family:“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。
我在开发一个简单的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>
如果您使用的是openjdk,则需要安装openjdk-6-sdk软件包。
将enter image description here的相对位置改为${java.home}/../lib/tools.jar
的绝对路径对我有用。
你应该只需要在C:\Program Files\Java\jdk1.6.0_29\lib\tools.jar
中更改它。
现在对于playn-samples,Vladiator是对的,那太多的pom文件无法改变。
我遇到了同样的问题,我能够解决它的方法是将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文件所在的位置。
没有其他答案为我做了。在eclipse中检查pom.xml的“依赖层次结构”是什么,给过滤器“工具”显示我对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的库中。
转到窗口 - >设置 - > Java - >安装JRE - >选择JDK并单击编辑 - >单击添加外部JAR并添加tools.jar(放在JDK / lib中)
与我和Windows 7一样。我最后在eclipse.ini
上添加了两行:
-vm
C:\Program Files\Java\jdk1.6.0_35\bin
我尝试在那里使用%JAVA_HOME%
,但它没有用。
检查机器上的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>
经过一段时间的努力,我终于让它与eclipse.ini
而不是命令行一起工作。在最后阅读documentation之后,我意识到-vm参数必须在一个单独的行上,不带引号,并且在任何-vmargs之前:
-vm
C:\Program Files\Java\jdk1.7.0_45\bin\javaw.exe
在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>