Maven 3构件问题

34

我在eclipse中使用struts2-archtype-starter创建了一个新的struts项目。

在操作之前,我的项目中已经存在一些错误。我解决了大多数问题,但还有一个问题一直困扰着我。

Missing artifact com.sun:tools:jar:1.5.0:system pom.xml

我尝试手动将tools.jar添加到我的存储库中,但这并没有解决问题。

我的pom文件看起来像这样:

<?xml version="1.0" encoding="UTF-8" ?>

<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>
    <groupId>com.divespot</groupId>
    <artifactId>website</artifactId>
    <packaging>war</packaging>
    <version>0.0.1-SNAPSHOT</version>
    <name>E-Divespot diving community</name>
    <url>http://www.e-divespot.com</url>
    <description>A website to support divers from all around the world.</description>

    <dependencies>
        <!-- Junit -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.8.2</version>
            <scope>test</scope>
        </dependency>

        <!--  Struts 2 -->
        <dependency>
            <groupId>org.apache.struts</groupId>
            <artifactId>struts2-core</artifactId>
            <version>2.0.11.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.struts</groupId>
            <artifactId>struts2-sitemesh-plugin</artifactId>
            <version>2.0.11.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.struts</groupId>
            <artifactId>struts2-spring-plugin</artifactId>
            <version>2.0.11.2</version>
        </dependency>

        <!-- Servlet & Jsp -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.4</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.0</version>
            <scope>provided</scope>
        </dependency>

        <!-- Jakarta Commons -->
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.1.1</version>
        </dependency>

        <!-- Dwr -->
        <dependency>
            <groupId>uk.ltd.getahead</groupId>
            <artifactId>dwr</artifactId>
            <version>1.1-beta-3</version>
        </dependency>
    </dependencies>

    <build>
      <finalName>website</finalName>
        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                   <source>1.6</source>
                   <target>1.6</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.mortbay.jetty</groupId>
                <artifactId>maven-jetty-plugin</artifactId>
                <version>6.1.5</version>
                <configuration>
                    <scanIntervalSeconds>10</scanIntervalSeconds>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

可能是Missing artifact com.sun:tools:jar的重复问题。 - eis
9个回答

45

您看到的错误可能是因为您未正确设置JAVA_HOME路径引起的。您是否看到类似于C:\{directories to jre}\..\lib\tools.jar的内容?

您可以通过修改eclipse.ini并添加类似以下内容来使用内置的JDK启动Eclipse:

-vm
C:\{directories to JDK}\bin\javaw.exe

据我所了解,Eclipse 默认使用系统 JRE 启动 Eclipse。启动 Eclipse 时,您可能会看到类似于“Eclipse 正在运行在 JRE 下,而 m2eclipse 需要 JDK,某些插件将无法工作”的消息。

如果您在 Eclipse 中转到“帮助 -> 安装详细信息”,查找 -vm,则可能会发现它指向的位置不符合预期的路径结构。

注意:出现此问题时,Maven 中的 java.home 是从启动 Eclipse 的位置计算出来的。因此,当它尝试从它认为是 java.home 的位置提取 tools.jar 时,这可能并不是您实际设置为环境/系统变量的 JAVA_HOME。


3
在"-vmargs"之前,你需要确保它被放置在正确的位置,有可能需要在路径周围加上引号(例如Program Files...)。我会花时间尝试让它工作,因为我相信这将解决你的问题。 - John Vint
没问题!我自己也花了一些时间才使其正常工作 :) - John Vint
谢谢,这节省了我一些麻烦。 - Will
1
+1。省去了我一些时间。只是一个快速的提醒:在设置生效之前,您可能需要清理工作区。 - Viccari
今天我遇到了类似的问题,可能是由于某个Java更新引起的。修改eclipse.ini文件可以解决问题,但我所做的更改是将-Dosgi.requiredJavaVersion=1.6改为-Dosgi.requiredJavaVersion=1.7 - kratenko
我发现将属性分布在两行上非常重要(如上面的示例),如果在单行上声明,则会导致Eclipse忽略该设置。 - Ben

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

3

你不能使用存储库中的tools.jar工具。

不幸的是,你依赖树中的某些部分认为你可以使用它。因此,你需要使用“excludes”来摆脱现有的依赖项,然后用以下内容替换它。

如果你在下面的版本中匹配错误消息中的版本,你可能不需要“excludes”。

你需要:

  <profiles>
    <profile>
      <id>default-tools.jar</id>
      <activation>
        <property>
          <name>java.vendor</name>
          <value>Sun Microsystems Inc.</value>
        </property>
      </activation>
      <dependencies>
        <dependency>
          <groupId>com.sun</groupId>
          <artifactId>tools</artifactId>
          <version>whatever</version>
          <scope>system</scope>
          <systemPath>${java.home}/../lib/tools.jar</systemPath>
        </dependency>
      </dependencies>
    </profile>


你还需要删除普通的依赖项。 - bmargulies

3
需要添加另一个答案。在将m2e升级到1.4.20130601-0317后,错误再次出现。同样,包括我刚提出的解决方案在内,没有任何建议的解决方案起作用。最终,我找到了罪魁祸首:包括org.htmlparser:1.6会隐含依赖于tools.jar。不知道为什么删除已安装的jre可以帮助解决旧版m2e(1.0.something)的问题。现在的解决方案是排除tools.jar
    <dependency>
        <groupId>org.htmlparser</groupId>
        <artifactId>htmlparser</artifactId>
        <version>1.6</version>
        <exclusions>
            <exclusion>
                <artifactId>tools</artifactId>
                <groupId>com.sun</groupId>
            </exclusion>
        </exclusions>
    </dependency>

1

最近我遇到了同样的问题,但上述解决方案都没有起作用。我发现了http://blog.samratdhillon.com/archives/598,并认为这可能是那里提到的Eclipse bug

我不得不从Eclipse的配置中删除所有安装的jre(路径为Window -> Preferences -> Java -> Installed JREs),只保留一个jdk。之后,maven就可以正常工作,而无需对eclipse.ini或其他任何内容进行修改。这是在Eclipse Indigo Service Release 1下实现的。


0

主要问题是 mavan 找不到 tool.jar 工具包,因此出现了这个问题。您只需在项目中添加 tool.jar 文件即可。 Tool.jar 存在于您的 Java 软件中的 C:\Program Files\Java\jdk1.6.0_14\lib 目录下。
尝试使用以下代码,希望您能成功运行: http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 Strust2Testing Strust2Testing 0.0.1-SNAPSHOT war org.apache.struts

        <artifactId>Struts2-core </artifactId>
        <version>2.3.15.1</version>
        <exclusions>
    <exclusion>
        <artifactId>tools</artifactId>
        <groupId>com.sun</groupId>
    </exclusion>
</exclusions>
    </dependency>
</dependencies>
<build>
    <sourceDirectory>src</sourceDirectory>
    <plugins>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version>
            <configuration>
                <source>1.6</source>
                <target>1.6</target>
            </configuration>
        </plugin>
        <plugin>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.3</version>
            <configuration>
                <warSourceDirectory>WebContent</warSourceDirectory>
                <failOnMissingWebXml>false</failOnMissingWebXml>
            </configuration>
        </plugin>
    </plugins>
</build>


0

0

eclipse.ini 的示例:

-startup
plugins/org.eclipse.equinox.launcher_1.2.0.v20110502.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.100.v20110502
-product
org.eclipse.epp.package.java.product
--launcher.defaultAction
openFile
--launcher.XXMaxPermSize
256M
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
256m
--launcher.defaultAction
openFile
-vm
C:\Java\JDK\1.6\bin\javaw.exe
-vmargs
-Dosgi.requiredJavaVersion=1.5
-Xms40m
-Xmx1024m

-vm value: Linux 示例:

-vm
/opt/sun-jdk-1.6.0.02/bin/java

在此输入链接描述


-1

sudo apt-get install openjdk-7-source

请安装openjdk-7源代码。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接