缺少工件com.sun:工具:jar

问题描述 投票:70回答:20

我一直在关注入门教程,但在使用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>
java maven playn
20个回答
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
投票

在pom.xml文件中添加此依赖项。希望这有帮助。 在qazxsw poi属性中,你必须编写你的jdk lib路径..

<systemPath>

1
投票

正如其他海报所述,这里的问题与日食所使用的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的设置方式,但正如我无法做到的那样,这是有效的。


1
投票

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

0
投票

使用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中转到:

  1. 窗口 - >首选项 - >已安装的JRE
  2. 点击添加(找到新的JRE)
  3. 选择标准JVM - > next
  4. 单击Directory以找到JRE home,放入JDK_INSTALL_LOCATION并完成。
  5. 转到java项目的Properties - > Java build Path - > Libraries - > select JRE - > Edit - > select Workspace default JRE - > finish
  6. 使用项目清理完整的工作区清理 - >清理。

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才有。


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的\版本

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

ProgramData

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

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


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的另一个项目仍然存在。


0
投票

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

顺便说一句,在我看来,这个bug是造成麻烦的原因:-vm C:\Java\JDK\1.6


0
投票

就我而言,我正在从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


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版本: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。


24
投票

我在开发一个简单的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 Artifact problem

<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>

-1
投票

如果您使用的是openjdk,则需要安装openjdk-6-sdk软件包。


-1
投票

enter image description here的相对位置改为${java.home}/../lib/tools.jar的绝对路径对我有用。

你应该只需要在C:\Program Files\Java\jdk1.6.0_29\lib\tools.jar中更改它。

现在对于playn-samples,Vladiator是对的,那太多的pom文件无法改变。


22
投票

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


14
投票

没有其他答案为我做了。在eclipse中检查pom.xml的“依赖层次结构”是什么,给过滤器“工具”显示我对tools.jar有一个真正的依赖:

Eclipse View

所以对我来说,罪魁祸首是:

<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>

排除似乎没有任何缺点。


6
投票

我在Eclipse 4.3设置中解决了这个问题 - 只是将JDK库添加到JRE的库中。

转到窗口 - >设置 - > Java - >安装JRE - >选择JDK并单击编辑 - >单击添加外部JAR并添加tools.jar(放在JDK / lib中)


6
投票

与我和Windows 7一样。我最后在eclipse.ini上添加了两行:

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

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


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>

3
投票

经过一段时间的努力,我终于让它与eclipse.ini而不是命令行一起工作。在最后阅读documentation之后,我意识到-vm参数必须在一个单独的行上,不带引号,并且在任何-vmargs之前:

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

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>
© www.soinside.com 2019 - 2024. All rights reserved.