我是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及更高版本中。
答案 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以获取示例。
-vm
/路径/到/ JDK /斌/ javaw进程
在Windows上查看此SO answer以获取示例。