2013-03-20 40 views
0

我是Struts2的新手。Struts2排除com.sun:工具:jar:1.5.0必需?

每當我包含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朱諾給我的錯誤在這一點上。

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

這很奇怪,我在幾個項目上使用了Struts 2,我不記得要排除這個com.sun.tools JAR ...你使用的是什麼版本的Struts2?您是在命令行中使用Maven還是作爲Eclipse/Intellij插件? – 2013-03-20 10:04:45

+0

@PierreHenry我正在使用maven插件。 2.1.6版以下版本不會出現此錯誤。 – Mawia 2013-03-20 10:17:05

+0

如果你從命令行生成(沒有排除),它是否也會給你這個「Missing artifact」錯誤? – 2013-03-20 10:19:03

回答

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在編譯項目時無論如何都可用。

+0

+1謝謝你清除我的疑惑。 – Mawia 2013-03-20 11:10:56

+0

設置排除不是正確的方法!檢查這個答案,而不是:http://stackoverflow.com/a/19827445/363573 – Stephan 2013-11-07 03:26:39

+0

@亞雷斯我不同意鏈接的答案。這是關於一個特定於日食的問題。這裏的問題是關於maven的。我認爲你錯過了最重要的一點:struts只需要在編譯時使用tools.jar! – ben75 2013-11-07 09:26:31

0

你不應該這樣做。

您的確表示您的Eclipse,Eclipse項目和/或Eclipse Maven插件配置存在問題。通過比較,我基本上每個版本都有S2項目,並且我不需要排除Java工具jar,也不需要。

+0

那麼,OP應該做什麼? debelopers應該做什麼來避免這個問題? – Stephan 2013-11-06 12:32:56

+0

@Alex OP應包含更多信息,以便人們可以重現錯誤;我不能。 – 2013-11-06 13:34:06

+0

我最近有同樣的問題,這裏是我如何解決它:http://stackoverflow.com/a/19827445/363573。你會注意到我沒有排除任何東西;) – Stephan 2013-11-07 03:30:21

0

問題EXPLAINED

其實,什麼情況是,Struts2的依賴於系統的依賴,即tools.jar。通過解析此路徑找到此依賴關係:${java.home}/../lib/tools.jar

如果您使用maven編譯您的項目,maven將會巧妙地將${java.home}替換爲正確的JDK的位置。

由於某些原因,如果您嘗試使用eclipse編譯mavenized項目(即一般情況下使用m2e幫助),${java.home}已針對-vm eclipse命令行參數進行了解析。


SOLUTION

如果你想解決這個問題,不排除tools.jar。相反,迫使你在日食以下任一方式與您最喜愛的JDK運行(因爲我不知道你的操作系統,我給一個操作系統實例無關的形式):

  • 命令行開關

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

檢查這個SO answer Windows上的例子。

  • 的eclipse.ini

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

檢查這個SO answer Windows上的例子。