104

我一直在关注入门教程,但是在使用 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>
4

27 回答 27

58

我刚刚发布了关于这个问题以及我如何解决它的问题,但我也会在这里粘贴(并扩展)它,因为它看起来更相关。

在 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密钥。

于 2012-01-18T17:44:41.470 回答
30

我在开发一个简单的 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 评论中找到了另一个解决方案:

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>

他们建议包括一个工具 jar 的排除声明,它可以工作。总结一下:您可以在依赖项中包含排除规则并避免出现 tool.jar 问题:

 <exclusions>
            <exclusion>
                <artifactId>tools</artifactId>
                <groupId>com.sun</groupId>
            </exclusion>
        </exclusions>
于 2012-09-01T20:03:03.727 回答
27

我遇到了同样的问题,我能够解决它的方法是将依赖位置添加tools.jarpom.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 文件所在的位置。

于 2011-12-06T05:33:29.373 回答
25

其他答案都没有为我做。在 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>

排除似乎没有任何缺点。

于 2015-09-30T16:54:17.657 回答
8

我和 Windows 7 也是如此。我最终添加了两行eclipse.ini

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

我尝试%JAVA_HOME%在那里使用,但没有奏效。

于 2013-03-10T18:22:57.550 回答
6

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

转到 windows -> settings -> Java -> installed JREs -> 选择 JDK 并单击 Edit -> 单击 Add External JARs 并添加 tools.jar(放在 JDK/lib 中)

于 2013-10-04T12:30:43.197 回答
6

检查您机器上的 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>
于 2016-09-07T09:23:49.200 回答
5

如果此问题仍然存在,可能是因为 JDK 版本等于或大于 11。

tools.jar存档已从这些 JDK 的 lib 文件夹中删除(请参阅此类似问题的答案)。在这种情况下,请尝试使用不依赖于该库的其他版本的com.sun:tools库。

于 2020-03-05T15:46:00.550 回答
4

我也遇到了同样的问题

可能是由于这些中的任何一个-->

  1. 您安装了 JRE 而不是 JDK。(继续安装JDK)
  2. JDK 路径配置不正确或您的 IDE 使用了完全错误的 SDK(请参阅 Intellij 的项目结构)
  3. 您使用了错误的 JDK 版本,tools.jar 自版本 9 ( https://docs.oracle.com/en/java/javase/13/migrate/migration-guide.pdf )以来已从 jdk 中删除,您可以通过以下方式解决使用正确的 JDK(< 9) Oracle 迁移文档的屏幕截图
于 2021-03-19T11:57:29.567 回答
4

我得到了类似的错误。这是因为 JDK 没有在 eclipse 中正确设置。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>
于 2018-05-08T13:41:01.147 回答
3

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

-vm
C:\Program Files\Java\jdk1.7.0_45\bin\javaw.exe
于 2014-03-25T00:37:33.813 回答
3

如果您在新安装/升级的操作系统上看到这种情况,那只是因为 JAVA_HOME 设置不正确。

我们需要正确设置 JAVA_HOME。例如在 mac 上:如果我想使用 java 版本 1.8.0_261

export JAVA_HOME=`/usr/libexec/java_home -v 1.8.0_261`
于 2020-11-16T02:48:51.320 回答
1

最终使用 eclipse.ini 修复:

openFile
-vm (Your Java Home JDK here)

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

还必须将 JRE 更改为 JDK:

在 Eclipse IDE 中转到:

  1. 窗口 -> 首选项 -> 已安装的 JRE
  2. 单击添加(以找到新的 JRE)
  3. 选择标准 JVM -> 下一步
  4. 单击 Directory 找到 JRE 主页,放入 JDK_INSTALL_LOCATION 并完成。
  5. 转到您的 java 项目的属性 -> Java 构建路径 -> 库 -> 选择 JRE -> 编辑 -> 选择工作区默认 JRE -> 完成
  6. 使用 project -> clean 进行完整的工作区清理。
于 2013-08-22T11:48:11.670 回答
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> 
于 2013-07-12T07:12:15.820 回答
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>
于 2011-12-24T01:28:53.553 回答
1

正如其他海报所说,这里的问题与 Eclipse 使用的 JRE 无法找到工具 jar 有关。我通过与上述不同的方向解决了这个问题,这是因为我的项目和环境的方式。

Eclipse 4.5 运行时至少需要 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,创建了目录 C:\java\lib 并将其粘贴到那里。然后我重新启动了eclipse并清理了我的项目。VOILA 错误消失了。

这不是一个优雅的解决方案,我认为正确的解决方案是改变 POM 的设置方式,但因为我无法做到,所以这行得通。

于 2015-07-30T14:42:21.617 回答
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可以。

于 2012-09-03T16:31:09.760 回答
0

让我们了解为什么会发生此问题:

$ mvn -版本

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”,arch:“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。

于 2019-08-29T14:03:29.717 回答
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 的另一个项目仍然损坏。

于 2016-04-27T08:33:52.080 回答
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 并单击完成。

在此处输入图像描述

于 2020-01-22T10:05:26.750 回答
0

就我而言,我是从 Eclipse Run Configurations 执行 Maven Build。即使将默认 JRE 配置更改为指向 JDK 安装文件夹,我也没有解决这个问题。原因是 Maven 构建 - 运行配置中有一个 JRE 选项卡(见下图)。它仍然指向我的 JRE 安装。我将其更改为指向 JDK 安装,然后运行 ​​Maven Build。这一次,它奏效了。 在此处输入图像描述

于 2018-03-15T09:30:06.670 回答
0

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

  • PATH 环境变量指向 JDK 1.7\bin
  • 我的 JAVA_HOME 环境变量指向 JDK 1.7
  • 我的 eclipse.ini 有指向 JDK 1.7 的 javaw -vm 条目
  • 我的 Eclipse 偏好将 JDK 1.7 作为已安装的 JRE。
  • 我的项目构建路径使用的是 JDK 1.7。

然后我尝试了以下,

  • 打开命令提示符并键入 java -version。它向我展示了 JRE 1.8 版。

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

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

登记处

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

HKLM\软件\Javasoft\版本

我将此处的条目更改为指向 JDK 1.7

程序数据

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

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

于 2016-04-05T04:10:51.153 回答
0

我相信这些本地补丁会起作用。然而,这些可能会导致下游部署问题。我只是下载了带有 Java 11 的新版本的 Eclipse,现在一切正常。

于 2021-05-19T21:07:15.900 回答
0

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

顺便说一句,在我看来,这个错误是造成麻烦的原因:使用 Eclipse JRE 的 java.home 而不是构建 JRE

于 2017-02-20T13:28:05.273 回答
0

将 'Preferences -> Java -> Installed JRE' 下的 'Installed JREs' 更改为 JDK home 对我有用。

仅供参考 - 我正在使用 JDK 1.8。

于 2020-05-07T07:36:29.947 回答
0

另一种情况

  • JAVA_HOME变量必须指向 Java 11+ 安装。
  • Maven 用于旧项目。新项目使用 Gradle。
  • 旧的 maven 项目使用 Java 8,如果我们使用 Java 9+,其中一些项目会因缺少 tools.jar 文件错误而中断。

一个解法

  • 编辑mvnshell 脚本(mvn.batmvn.cmd在 Windows 上)并设置JAVA_HOME为指向 JDK 8 安装。
  • 该脚本位于您的 apache maven 安装下的 /bin 目录中。
  • 设置变量的示例(Windows 脚本):
    @REM ==== 开始验证 ====
    设置 JAVA_HOME=C:\Program Files\Java\jdk1.8.0_161
于 2021-07-20T17:14:32.333 回答
-1

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

你应该只需要在playn/pom.xml.

现在对于 playn-samples,Vladiator 是对的,需要更改的 pom 文件太多。

于 2012-01-09T00:53:14.427 回答