Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Struts2不包括com.sun:tools:jar:1.5.0必需吗?_Java_Maven_Struts2 - Fatal编程技术网

Java Struts2不包括com.sun:tools:jar:1.5.0必需吗?

Java Struts2不包括com.sun:tools:jar:1.5.0必需吗?,java,maven,struts2,Java,Maven,Struts2,我不熟悉Struts2 每当我包含Struts2依赖项时,为什么我必须这样做 <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-core</artifactId> <version>${struts.version}</version> <exclusio

我不熟悉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> 
出现此错误时:

Missing artifact com.sun:tools:jar:1.5.0
这是一种方法还是有更好的方法


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

工件
com.sun:tools:jar:1.5.0
是来自JDK(而不是JRE)的jar。此jar在任何maven存储库中都不可用,但位于
/lib
中。这就是为什么会出现这个错误

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

(不是在运行时)


因此,设置排除是解决此问题的正确方法。因为maven需要一个JDK来运行:tools.jar在编译项目时仍然可用。

工件
com.sun:tools:jar:1.5.0
是来自JDK的jar(不是JRE)。此jar在任何maven存储库中都不可用,但位于
/lib
中。这就是为什么会出现这个错误

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

(不是在运行时)


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

您不需要这样做


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

您不需要这样做


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

问题解释

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

如果使用maven编译项目,maven将足够聪明,可以用正确的JDK位置替换
${java.home}

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


解决方案

如果要解决此问题,请不要排除
tools.jar
。相反,强制您的eclipse使用您喜爱的JDK以以下任一方式运行(因为我不知道您的操作系统,所以我将以操作系统不可知的形式给出示例):

  • 命令行开关
/path/to/eclipse-vm/path/to/jdk/bin/javaw

在Windows上查看此示例

  • eclipse.ini
-vm
/路径/to/jdk/bin/javaw


在Windows上查看此示例。

已解释问题

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

如果使用maven编译项目,maven将足够聪明,可以用正确的JDK位置替换
${java.home}

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


解决方案

如果要解决此问题,请不要排除
tools.jar
。相反,强制您的eclipse使用您喜爱的JDK以以下任一方式运行(因为我不知道您的操作系统,所以我将以操作系统不可知的形式给出示例):

  • 命令行开关
/path/to/eclipse-vm/path/to/jdk/bin/javaw

在Windows上查看此示例

  • eclipse.ini
-vm
/路径/to/jdk/bin/javaw



在Windows上查看此示例。

这很奇怪,我在几个项目中使用了Struts 2,我不记得必须排除这个com.sun.tools JAR。。。您使用的是什么版本的Struts2?您是在命令行中使用Maven还是作为Eclipse/Intellij插件使用?@PierreHenry我使用的是Maven插件。低于2.1.6的版本没有给出此错误。如果您从命令行生成(没有排除),它是否也会给出此“缺少工件”错误?您可以在不排除任何内容的情况下解决此问题:这很奇怪,我在几个项目中使用了Struts 2,我不记得必须排除此com.sun.tools JAR。。。您使用的是什么版本的Struts2?您是在命令行中使用Maven还是作为Eclipse/Intellij插件使用?@PierreHenry我使用的是Maven插件。低于2.1.6的版本不会出现此错误。如果从命令行生成(不排除),是否也会出现此“缺少工件”错误?您可以在不排除任何内容的情况下解决此问题:那么OP应该怎么做?debelopers应该做些什么来避免这个问题?@Alex OP应该包含更多信息,这样人们可以重现错误;我不能。我最近遇到了同样的问题,下面是我如何解决的:。你会注意到我没有排除任何东西;)那我们该怎么办?debelopers应该做些什么来避免这个问题?@Alex OP应该包含更多信息,这样人们可以重现错误;我不能。我最近遇到了同样的问题,下面是我如何解决的:。你会注意到我没有排除任何东西;)设置排除不是正确的方法!改为勾选这个答案:@Alex我不同意链接的答案。这是关于一个特定于eclipse的问题。这里的问题是关于maven的。我认为你是错的
Missing artifact com.sun:tools:jar:1.5.0