【问题标题】:Struts2 exclude com.sun:tools:jar:1.5.0 required?Struts2 排除 com.sun:tools:jar:1.5.0 需要吗?
【发布时间】:2013-03-20 09:24:56
【问题描述】:

我是 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 及更高版本。

【问题讨论】:

  • 这很奇怪,我在几个项目中使用了 Struts 2,我不记得必须排除这个 com.sun.tools JAR...你使用的是什么版本的 Struts2?你是在命令行中使用 Maven 还是作为 Eclipse/Intellij 插件使用?
  • @PierreHenry 我正在使用 maven 插件。低于 2.1.6 的版本不会出现此错误。
  • 如果你从命令行构建(没有排除),它是否也会给你这个“缺少工件”错误?
  • 你可以在不排除任何东西的情况下解决这个问题:stackoverflow.com/a/19827445/363573

标签: java maven struts2


【解决方案1】:

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

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

Struts2 requires this dependency at compile time(不在运行时)。

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

【讨论】:

  • 设置排除不是正确的方法!请检查此答案:stackoverflow.com/a/19827445/363573
  • @Alex 我不同意链接的答案。这是关于 Eclipse 的特定问题。这里的问题是关于 Maven 的。我认为您遗漏了最重要的一点:struts 仅在编译时需要 tools.jar!
  • @ben75 OP 说错误出现在 Eclipse Juno 中。链接的答案至少提供了另一种方式。
【解决方案2】:

您不需要这样做。

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

【讨论】:

  • 那么 OP 应该做什么? debelopers应该怎么做才能避免这个问题?
  • @Alex OP 应该包含更多信息,以便人们可以重现错误;我不能。
  • 我最近遇到了同样的问题,我是这样解决的:stackoverflow.com/a/19827445/363573。你会注意到我没有排除任何东西;)
【解决方案3】:

问题解释

实际上,struts2 依赖于一个系统依赖,即tools.jar。这个依赖是通过解析这个路径找到的:${java.home}/../lib/tools.jar

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

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


解决方案

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

  • 命令行开关

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

查看SO answer 以获取 Windows 上的示例。

  • eclipse.ini

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

查看SO answer 以获取 Windows 上的示例。

【讨论】:

    猜你喜欢
    • 2013-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-24
    • 2012-03-11
    相关资源
    最近更新 更多