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

bol*_*ons 78 java maven playn

我一直在关注入门教程,但在使用Maven导入playn项目后卡住了.我正在使用在64位Windows 7上运行的Eclipse Indigo.

所有导入的项目都有相同的错误:

Missing Artifact com.sun:tools:jar in all the pom.xml files.
Run Code Online (Sandbox Code Playgroud)

经过几个小时的搜索论坛,我尝试过:

安装最新的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>
Run Code Online (Sandbox Code Playgroud)

Kan*_*uri 53

我刚贴过关于这个问题,这个同样的问题,以及如何解决我的,但我会糊(和扩展),在这里为好,因为它似乎更相关.

在Windows 7中使用Eclipse时遇到了同样的问题,即使我在Eclipse设置中从JRE列表中删除了JRE,并且只是在那里使用了JDK.

我最终要做的事情(正如你在你的问题中提到的那样)是修改我用来启动Eclipse的快捷方式的命令行,以便像这样添加-vm参数:

-vm "T:\Program Files\Java\jdk1.6.0_26\bin"
Run Code Online (Sandbox Code Playgroud)

当然,则需要调整指向的bin目录你的 JDK安装.这样做是因为Eclipse本身使用JDK而不是JRE运行,然后它能够tools.jar正确地找到它.

我相信这与Eclipse在没有指定时发现默认JRE的方式有关.我猜它倾向于更喜欢JRE而不是JDK(为什么,我不知道)并且找到它发现的第一个兼容的JRE.如果像Vladiat0r的回答所暗示的那样,它会关闭Windows注册表项,它HKLM\Software\JavaSoft\Java Runtime Environment首先会找到密钥,而不是HKLM\Software\JavaSoft\Java Development Kit密钥.

  • 这在Windows 7中适用于我们.我们必须修改快捷方式以添加-vm"..."参数,而不是使用eclipse.ini.此外,我们不得不在错误消失之前将我们的maven项目重新导入工作区. (10认同)
  • 同样在这里 - 没有骰子与.ini,但cmdline中的-vm arg工作. (2认同)

Cri*_*ado 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>
Run Code Online (Sandbox Code Playgroud)

但是,当您必须部署到生产实例时会发生什么?您可以使用对系统环境变量的引用来替换路径,但这仍然看起来不太好,至少对我而言.

我在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>
Run Code Online (Sandbox Code Playgroud)

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

 <exclusions>
            <exclusion>
                <artifactId>tools</artifactId>
                <groupId>com.sun</groupId>
            </exclusion>
        </exclusions>
Run Code Online (Sandbox Code Playgroud)

  • 提示:使用“ MVN依赖项:树”来查找要插入排除项的位置。 (2认同)

小智 23

我遇到了同样的问题,我能够解决它的方式是将依赖位置添加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>
Run Code Online (Sandbox Code Playgroud)

确保<systemPath>将tools 更改为tools.jar文件所在的位置.

  • 我强烈建议不要这样做 - 它解决了问题,但不能移植到其他开发人员或构建环境.看到其他答案,他们似乎做了伎俩 (39认同)

eis*_*eis 14

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

Eclipse视图

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

<dependency>
    <groupId>com.github.markusbernhardt</groupId>
    <artifactId>robotframework-selenium2library-java</artifactId>
    <version>1.4.0.7</version>
    <scope>test</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)

添加排除修复了它:

<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>
Run Code Online (Sandbox Code Playgroud)

排除似乎没有任何缺点.


Shi*_*yan 9

我也遇到了同样的问题

可能是由于以下任何一个原因 -->

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


Jak*_*mek 7

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

-vm 
C:\Program Files\Java\jdk1.6.0_35\bin
Run Code Online (Sandbox Code Playgroud)

我试过%JAVA_HOME%在那里使用,但它没有用.

  • 请注意未来的我:这必须在 `-vmargs` 行之前,因为过去的任何内容都将被解释为 VM 启动参数。所以:就在那个之前! (2认同)

小智 6

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

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


aru*_*mbu 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>
Run Code Online (Sandbox Code Playgroud)


Oli*_*ier 5

如果仍然出现这个问题,可能是因为JDK版本等于或大于11。

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