【问题标题】:In the pom.xml for a java project, I get missing artifact jdk.tools:jdk.tools:jar:1.6 error在 java 项目的 pom.xml 中,我缺少工件 jdk.tools:jdk.tools:jar:1.6 错误
【发布时间】:2015-05-25 13:24:40
【问题描述】:

我想我知道如何解决这个问题,除了:我不知道具体版本在 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>

但是我想用com.oracle,Windows上的jdk目录是jdk1.8。

那么有没有办法让 pom “想要”我机器上实际拥有的工具版本?

【问题讨论】:

  • maven 如何猜出你的机器上的版本是什么?
  • 我不知道是什么让它要求 1.6。我在最新版本的 java 下有 tools.jar 文件,但是当我指定该依赖项时,pom 仍然显示错误。错误(大红色圆圈)出现在 pom 的顶部——它与依赖块无关。
  • 我从来没有遇到过这样的问题,所以这只是一个猜测:你确定你正在使用 jdk,而不是调用 jre 吗?
  • 你能把你的pom贴在这里吗?以及确切的错误?
  • 这能回答你的问题吗? Missing artifact com.sun:tools:jar

标签: java maven


【解决方案1】:

我终于以正确的方式解决了这个问题。

当使用 JRE 而不是 JDK 启动 eclipse 时会发生这种情况,因为 tools.jar 不在 JRE 中。 基于该断言,尝试安装 JDK。如果已经安装,请检查您的 Path 是否有 JDK 路径而不是 JRE 路径。

注意,最新版本的java似乎在Path下面的目录中添加了:C:\ProgramData\Oracle\Java\javapath。它包含可能链接到 JRE 的快捷方式。您需要删除它并添加指向您的 JDK bin 文件夹的链接。 (例如C:\Program Files\Java\jdk1.8.0_66\bin

请注意,您可能需要重新启动计算机才能使 Path 中的更改对 eclipse 启动生效(我不太明白为什么必须这样做,但我确实这样做了)。

另请注意,Java 更新可能会将javapath 重新添加到您的 PATH 中。因此,您可能不想使用自动更新,而是手动更新 JDK 并在安装后调整路径。它有点重,但确实有效。

【讨论】:

  • 我还必须删除 c:\windows\system32 中的 JRE .exe 副本。感觉不好,但无论如何让臃肿的 Eclipse/MavenCrapWare 工作。
【解决方案2】:

对于将来遇到此问题的任何人,请继续阅读以获取更优雅的解决方案:

原因

此问题出现在以下两种情况之一:

  1. 您没有安装和配置 JDK;或

  2. 您已安装 JDK 和 JRE,并且 JRE 优先于 JDK 路径。

解决方案

this link by the team at 'Hadoop in the real world' 中所述,您只需在pom.xml 文件中将依赖项添加到tools.jar

<dependency>
<groupId>jdk.tools</groupId>
<artifactId>jdk.tools</artifactId>
<version>1.7.0_05</version>
<scope>system</scope>
<systemPath>${JAVA_HOME}/lib/tools.jar</systemPath>
</dependency>

如果错误仍然存​​在,则只需将tools.jar的路径更改为绝对路径,如下所示:

<systemPath>C:/Program Files/Java/jdk1.8.0_65/lib/tools.jar</systemPath>

【讨论】:

  • 系统路径在 eclipse 中为我做了。
  • @VikramDeshmukh:我们现在处于“未来”,问题实际上可能出在 JDK 版本上。看我的回答here
【解决方案3】:

我认为解决此问题的最佳方法是将以下配置添加到您的 eclipse.ini 中,以确保它在运行 eclipse 时使用 javaw 的 jdk 副本,而不是解决问题的 JRE 副本,这似乎是解决问题的正确方法

-vm
C:/Program Files/Java/jdk1.8.0_73/bin/javaw.exe

【讨论】:

  • 我认为这个问题是检查项目的人如何得到这个。因此,我认为 pom 是解决问题的正确位置。
  • 在 pom 中解决它的问题是,签出项目的用户无论如何都应该使用 javaw 的 jdk 副本而不是 jre。所以我认为这最好通过约定而不是配置来解决。
  • @Jeff 此外,每个单独的用户都将拥有指向相关 jar 文件的不同路径,因此无法像使用 maven 配置一样运行构建。同样以这种方式修改 pom 将使 POM 不再对 SCCS 友好。例如我们混合使用 Mac / Unix / Windows 环境,因此相关路径会因用户而异。虽然使用 java.home 环境变量可以解决这个问题。
【解决方案4】:

您只需将依赖项添加到 pom.xml 文件中的 tools.jar 即可。

<dependency>
<groupId>jdk.tools</groupId>
<artifactId>jdk.tools</artifactId>
<version>1.7.0_05</version>
<scope>system</scope>
<systemPath>${JAVA_HOME}/lib/tools.jar</systemPath>
</dependency>

如果错误依旧,将tools.jar的路径改为绝对路径,如下图:

<systemPath>C:/Program Files/Java/jdk1.8.0_65/lib/tools.jar</systemPath>

【讨论】:

    【解决方案5】:

    您可以使用“java.home”环境变量:

    <dependency>
       <groupId>com.sun</groupId>
       <artifactId>tools</artifactId>
       <version>1.6</version>
       <scope>system</scope>
       <systemPath>${java.home}/lib/tools.jar</systemPath>
    </dependency>
    

    请查看:https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#System_Dependencies

    【讨论】:

    • 我的问题是,为什么错误是指缺少1.6版本的tools.jar?我有这个文件的更新版本 (1.8),我希望能够使用它。
    • 对不起,我误会了。 1.6 版本可能来自您的 JAVA_HOME 环境变量中引用的 JDK 版本。您的 JAVA_HOME 是否使用 JDK 1.8 路径定义?你的 IDE 呢?您是在 IDE 外部还是内部收到此错误?也许您的 IDE 没有使用您期望的 JDK 版本?
    【解决方案6】:

    我在eclipse中找到了解决这个问题的办法。

    在 Eclipse 中,

    导航到窗口 -> 首选项

    在左侧窗格中,展开 Java,您将找到“已安装的 JRE”条目

    选择它,您应该能够看到引用 JRE 文件夹而不是 JDK 文件夹的 JRE 条目。

    选择条目进行编辑,然后将其重定向到 JDK 文件夹并单击应用。

    这立即解决了我的问题。

    【讨论】:

      【解决方案7】:
      <dependency>
          <groupId>jdk.tools</groupId>
          <artifactId>jdk.tools</artifactId>
          <version>1.7</version>
          <scope>system</scope>
          <systemPath>C:/jdk1.7.0_51/lib/tools.jar</systemPath>
      </dependency>
      

      【讨论】:

        【解决方案8】:

        为了那些在 2021 年遇到此错误(在 OP 之后很多年)并使用现代 openjdk 发行版并使用现代 openjdk 发行版的人的利益,可以将 jdk.tools 从单个依赖项中排除,如下所示:

        <dependency>
            <groupId>org.apache.systemds</groupId>
            <artifactId>systemds</artifactId>
            <version>2.1.0</version>
            <exclusions>
                <exclusion>
                    <artifactId>jdk.tools</artifactId>
                    <groupId>jdk.tools</groupId>
                </exclusion>
            </exclusions>
        </dependency>
        

        诚然,我不确定这样做的一般后果,但它在我需要它的情况下很有用(例如,在运行 mvn dependency:copy-dependencies 时)

        【讨论】:

          猜你喜欢
          • 2012-06-22
          • 1970-01-01
          • 2012-01-31
          • 1970-01-01
          • 2017-06-19
          • 1970-01-01
          • 2023-03-15
          • 2017-06-28
          • 2020-11-26
          相关资源
          最近更新 更多