缺失的构件com.sun:tools:jar。

115

我一直在按照入门教程进行学习,但是在使用Maven导入playn项目后遇到了困难。我的操作系统是64位Windows 7,使用的IDE是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>

你在命令行中运行Maven时是否遇到相同的错误? - Raghuram
我添加了pom.xml文件。很抱歉我不知道如何使用命令行来处理maven。 - boldinventions
由于这是一个常见问题,您能接受一个对您有效的答案吗? - Roy Truelove
一个快速的解决方案是将JRE指向JDK文件夹中可用的那个。 - Naveen Raj
在使用Eclipse Neon(4.6.3)运行机器人框架测试用例时,我遇到了类似的问题。在“Window/Preferences/Java/Installed JRE's”下将JRE更改为JDK,这对我有用。正如上面正确指出的那样,JDK确实包含tools.jar。 - David
显示剩余2条评论
27个回答

3

在挣扎了一段时间后,我终于通过使用eclipse.ini而非命令行使其正常运行。在终于阅读文档后,我意识到-vm参数必须单独放在一行、不加引号,并且在任何-vmargs之前:

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

3

我遇到了类似的错误。 这是因为在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>

1
在pom文件的有效POM选项卡中,我看到以下派生路径:C:\Program Files\Java\jre6/../lib/tools.jar,我认为这不是Windows中的有效路径。我尝试将tools.jar复制到jre6/lib文件夹以及Java/lib文件夹中,但没有成功。
值"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>

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> 

1
如其他帖子所述,此处的问题与Eclipse使用的JRE无法找到工具jar有关。我通过采取与上述陈述略有不同的方法来解决这个问题,这是因为我的项目和环境的方式。
Eclipse 4.5需要至少Java 7才能运行,因此我已经将系统设置为使用位于C:\ java \ jre1.8.0_45的Java 8 JRE。
接下来,我正在使用一个假定我正在使用Java 6 JDK运行的POM文件。
  <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,创建了C:\ java \ lib目录并将其粘贴在那里。然后我重新启动了eclipse并清理了我的项目。然后,问题就解决了。

这不是一个优雅的解决方案,我认为正确的解决方案应该是更改POM的设置方式,但由于我无法这样做,所以这个方法有效。


1
最终使用了eclipse.ini修复:
openFile
-vm (Your Java Home JDK here)

例如,-vm C:\Java\JDK\1.6
还必须将JRE更改为JDK:
在Eclipse IDE中前往:
  1. 窗口 -> 首选项 -> 已安装的JREs
  2. 点击添加(以定位新的JRE)
  3. 选择标准JVM -> 下一步
  4. 点击目录以找到JRE主目录,放置JDK_INSTALL_LOCATION并完成。
  5. 转到您的Java项目的属性 -> Java构建路径 -> 库 -> 选择JRE -> 编辑 -> 选择工作区默认JRE -> 完成
  6. 使用项目 -> 清理进行完整的工作区清理。

我们所有的 Windows 上的 Eclipse IDE 实例都遇到了这个问题。对于我们来说,所有基于 Ubuntu 的 Eclipse IDE 都没有受到影响。因此,我们在 Windows 实例上使用了这种方法,它可以解决我们的问题。请确保在 -vm 之后添加换行符,在下一行上放置 Java SDK 路径,并将所有新添加的 -vm 标志放在 eclipse.ini 文件中 --vmargs 之前。 - tom_mai78101

0

我在Windows 7和Eclipse 3.7上遇到了同样的问题,但是我通过以下方式解决了它:

eclipse.exe -vm "D:\JDK6\bin"

你可以打开命令提示符并像这样启动eclipse,或者你可以编辑你的快捷方式,在“目标”部分添加“-vm"D:\JDK6\bin"”作为参数。

另外,我也尝试将“-vm"D:\JDK6\bin"”添加到eclipse.ini中,但没有起作用。而且添加JRE6也不会起作用,因为它的“lib”目录中没有tools.jar文件,只有JDK才有。


0

在尝试了上述所有方法后,我仍然遇到了同样的问题。

  • PATH环境变量指向JDK 1.7\bin
  • JAVA_HOME环境变量指向JDK 1.7
  • eclipse.ini文件中javaw -vm条目指向JDK 1.7
  • eclipse首选项中安装了JDK 1.7作为已安装的JRE。
  • 我的项目构建路径正在使用JDK 1.7。

然后我尝试了以下方法:

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

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

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

注册表

还有一个注册表键,其中指定了JRE位置

HKLM\Software\Javasoft\Version

我更改了这里的条目以指向JDK 1.7

程序数据

目录 "C:\ProgramData\Oracle\Java\javapath" 存在于 PATH 环境变量中,其中包含了指向 java、javaw 等的快捷方式... 这些快捷方式的目标都是 JRE 1.8。 (我认为这是主要问题所在) 我将快捷方式更改为指向正确的 JDK exe 文件。

完成上述步骤后,我打开了 Eclipse,所有 jdk.tools pom.xml 错误都消失了。


0

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

顺便说一句,我认为这个错误导致了麻烦:使用Eclipse JRE的java.home而不是构建JRE


0
让我们了解为什么发生了这个问题:

$ 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 version:1.8.0_221,vendor:Oracle Corporation,runtime:C:\Program Files\Java\jre1.8.0_221 Default locale:en_GB,platform encoding:Cp1252 OS name:“windows 10”,version:“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文件。

在JDK路径中存在tools.jar,因此我们需要在使用之前向maven提及它。现在的机器都已经安装了可用的jre,但是只有开发时才需要jdk。这可能是maven自动选择jre路径的原因。

如需更多帮助,请阅读maven安装路径中可用的mvn.cmd代码。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接