[英]Struts2 exclude com.sun:tools:jar:1.5.0 required?
我是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版和更高版本中。
工件com.sun:tools:jar:1.5.0
是來自JDK(不是JRE)的jar。 此jar在任何Maven存儲庫中均不可用,但位於<JDK_HOME>/lib
。 這就是為什么您會收到此錯誤。
當您指定排除項時,maven不會嘗試查找jar(因此它不會失敗)。
Struts2在編譯時 (而不是在運行時) 需要此依賴項 。
因此,設置排除規則是解決此問題的正確方法。 由於maven需要一個JDK才能運行:在編譯項目時,總可以使用tools.jar。
您不需要這樣做。
您所做的指示表明Eclipse,Eclipse項目和/或Eclipse Maven插件配置中存在問題。 相比之下,我基本上每個版本都有S2項目,並且毫無疑問,我不需要排除Java工具jar,而且從來沒有。
問題說明
實際上,發生的事情是struts2依賴於系統依賴性,即tools.jar
。 可通過以下路徑找到此依賴關系: ${java.home}/../lib/tools.jar
。
如果使用maven編譯項目,則maven將足夠聰明,可以用正確的JDK位置替換${java.home}
。
由於某些原因,如果嘗試使用eclipse編譯經過Maven處理的項目(即通常使用m2e幫助),則會針對-vm
eclipse命令行參數來解析${java.home}
。
解
如果要解決此問題,請不要排除tools.jar
。 相反,可以通過以下兩種方式強制Eclipse與您最喜歡的JDK一起運行( 由於我不了解您的操作系統,因此我將以與操作系統無關的形式提供示例 ):
/ path / to / eclipse -vm / path / to / jdk / bin / javaw
在Windows上查看該SO答案以獲取示例。
-vm
/路徑/到/ JDK /斌/ javaw進程
在Windows上查看該SO答案以獲取示例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.