Struts2排除com.sun:工具:jar:1.5.0是否需要?

时间:2013-03-20 09:24:57

标签: java maven struts2

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

3 个答案:

答案 0 :(得分:4)

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

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

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

因此设置排除是解决此问题的正确方法。由于maven需要运行JDK:在编译项目时无论如何都可以使用tools.jar。

答案 1 :(得分:0)

你不应该这样做。

您的确表明Eclipse,Eclipse项目和/或Eclipse Maven插件配置存在问题。通过比较,我基本上每个版本都有S2项目,并且在没有pom的情况下我需要排除Java工具jar,而且从来没有。

答案 2 :(得分:0)

问题解释

实际上,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

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

  • 的eclipse.ini
  

-vm
      /路径/到/ JDK /斌/ javaw进程

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