0

我是 Struts2 的新手。

每当我包含 Struts2 依赖项时,为什么我必须这样做?

<dependency>
        <groupId>org.apache.struts</groupId>
        <artifactId>struts2-core</artifactId>
        <version>${struts.version}</version>
        <exclusions>
            <exclusion>
                <artifactId>tools</artifactId>
                <groupId>com.sun</groupId>
            </exclusion>
        </exclusions>
    </dependency> 

如果我不这样做,Eclipse Juno在这一点上会给我错误。

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
 http://maven.apache.org/maven-v4_0_0.xsd

出现此错误:

Missing artifact com.sun:tools:jar:1.5.0

这是这样做的方法还是有更好的方法?

我注意到这个问题发生在 2.1.6 及更高版本。

4

3 回答 3

4

工件com.sun:tools:jar:1.5.0是来自 JDK(而不是 JRE)的 jar。此 jar 在任何 maven 存储库中均不可用,但位于<JDK_HOME>/lib. 这就是您收到此错误的原因。

当您指定排除项时,maven 不会尝试查找 jar(因此它不会失败)。

Struts2 在编译时(而不是在运行时)需要这个依赖。

所以设置排除是摆脱这个问题的正确方法。由于 maven 需要一个 JDK 来运行:tools.jar 在编译项目时无论如何都是可用的。

于 2013-03-20T10:19:43.083 回答
0

您不需要这样做。

您这样做表明您的 Eclipse、Eclipse 项目和/或 Eclipse Maven 插件配置存在问题。相比之下,我基本上每个版本都有 S2 项目,并且在任何 pom 中我都不需要排除 Java 工具 jar,而且从来没有。

于 2013-03-20T12:37:53.493 回答
0

问题解释

实际上,发生的事情是 struts2 依赖于系统依赖项,即tools.jar. 通过解析此路径找到此依赖项:${java.home}/../lib/tools.jar.

如果你用 maven 编译你的项目,maven 会很聪明地${java.home}用正确的JDK位置替换。

出于某种原因,如果您尝试使用 eclipse(即通常使用 m2e 帮助)编译您的 mavenized 项目,${java.home}则针对-vmeclipse 命令行参数进行解析。


解决方案

如果你想解决这个问题,不要排除tools.jar. 而是通过以下任一方式强制您的 Eclipse 与您最喜欢的 JDK 一起运行(因为我不了解您的操作系统,所以我将以与操作系统无关的形式给出示例):

  • 命令行开关

/path/to/eclipse -vm /path/to/jdk/bin/javaw

检查此SO 答案以获取 Windows 上的示例。

  • 日食.ini

-vm
/path/to/jdk/bin/javaw

检查此SO 答案以获取 Windows 上的示例。

于 2013-11-07T03:23:29.210 回答