我的設置:jdk 7,Tomcat 7.0.29,Eclipse Juno(帶m2e [Maven 3.0.4嵌入], m2eclipse的-WTP)修復maven JSTL 1.2.1的依賴關係,所以maven-war-plugin不打包冒犯Tomcat的JAR 7
我有一個動態Web項目與此JSTL依賴性:
<dependency>
<groupId>org.glassfish.web</groupId>
<artifactId>javax.servlet.jsp.jstl</artifactId>
<version>1.2.1</version>
</dependency>
當我mvn package
和部署在Tomcat上,我得到的日誌在這些非致命的消息不阻止我應用部署:
validateJarFile(...\WEB-INF\lib\jsp-api-2.1.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/el/Expression.class
validateJarFile(...\WEB-INF\lib\servlet-api-2.5.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class
我檢查並確認,有問題的JAR正在打包在WAR中。我檢查依賴與mvn dependency:tree
,並得到這個:
[INFO] \- org.glassfish.web:javax.servlet.jsp.jstl:jar:1.2.1:compile
[INFO] \- javax.servlet.jsp.jstl:jstl-api:jar:1.2:compile
[INFO] +- javax.servlet:servlet-api:jar:2.5:compile
[INFO] \- javax.servlet.jsp:jsp-api:jar:2.1:compile
兩個JAR文件都出現在compile
範圍內,但如果我檢查pom.xml上org.glassfish.web:javax.servlet.jsp.jstl:jar:1.2.1
我看到這一點:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.2</version>
<scope>provided</scope>
</dependency>
,顯示他們在provided
範圍,我認爲這會將它們從包裝中排除。
問題:
- 我如何告訴WAR插件不包括這些JAR的?
<excludes/>
不會削減它,因爲這也會將它們從構建路徑中刪除。 - 如果我想根據Servlet 3.0規範進行開發但保留此JSTL版本,該怎麼辦?
我有同樣的問題,你知道嗎? – ams