Missing artifact com.sun:tools:jar

2022-08-31 09:51:01

我一直在学习入门教程,但在使用Maven导入playn项目后,我陷入了困境。我正在使用在64位Windows 7上运行的Eclipse Indigo。

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

Missing Artifact com.sun:tools:jar in all the pom.xml files.

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

安装最新的 Java 1.6.029 更改我的环境变量以指向 更改我的 Eclipse Java 首选项以使用 JRE 。JAVA_HOME\program files\Java\jdk1.6_029jdk1.6_029

我真的很想尝试playn,但是为什么有一些帖子我似乎找不到解决方案的一致答案。有人说Sun从64位jdk中删除了一些东西,还有人说你必须编辑你的xml文件,很多人说你已经改变了你的,还有一个人说你必须改变你的Eclipse的VM选项。JAVA_HOME

任何帮助清除这个问题将不胜感激,并且可能对许多人有用,因为我在这里没有特别奇怪的设置。

(编辑)这是第一个项目中的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>

答案 1

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

在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 EnvironmentHKLM\Software\JavaSoft\Java Development Kit


答案 2

在开发一个简单的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问题:

 <exclusions>
            <exclusion>
                <artifactId>tools</artifactId>
                <groupId>com.sun</groupId>
            </exclusion>
        </exclusions>

推荐