我創建與Maven Web應用程序,和我有一個問題 - 由於某種原因,我得到servlet-api-2.5.jar
包括在內,這給了奇怪的例外。從WAR存檔中刪除此文件解決了所有問題,但我試圖瞭解爲什麼它首先出現在那裏。我依賴於完全pom.xml
文件是:Maven的:爲什麼我會收到servlet的API-2.5
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.sillyfly.webapp</groupId>
<artifactId>Webapp</artifactId>
<version>0.1</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.3</version>
<configuration>
<source>7</source>
<target>7</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.6</version>
<configuration>
<webXml>web/WEB-INF/web.xml</webXml>
<webappDirectory>web</webappDirectory>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.json</artifactId>
<version>1.0.4</version>
</dependency>
<dependency>
<groupId>org.apache.taglibs</groupId>
<artifactId>taglibs-standard-impl</artifactId>
<version>1.2.5</version>
</dependency>
<dependency>
<groupId>org.apache.taglibs</groupId>
<artifactId>taglibs-standard-jstlel</artifactId>
<version>1.2.5</version>
</dependency>
<dependency>
<groupId>org.apache.taglibs</groupId>
<artifactId>taglibs-standard-spec</artifactId>
<version>1.2.5</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
</project>
運行mvn dependency:tree -Dverbose
產量:
[INFO] Scanning for projects...
[INFO] Searching repository for plugin with prefix: 'dependency'.
[INFO] ------------------------------------------------------------------------
[INFO] Building Unnamed - org.sillyfly.webapp:Webapp:jar:0.1
[INFO] task-segment: [dependency:tree]
[INFO] ------------------------------------------------------------------------
[INFO] [dependency:tree {execution: default-cli}]
[INFO] org.sillyfly.webapp:Webapp:jar:0.1
[INFO] +- org.glassfish:javax.json:jar:1.0.4:compile
[INFO] +- org.apache.taglibs:taglibs-standard-impl:jar:1.2.5:compile
[INFO] +- org.apache.taglibs:taglibs-standard-jstlel:jar:1.2.5:compile
[INFO] +- org.apache.taglibs:taglibs-standard-spec:jar:1.2.5:compile
[INFO] +- mysql:mysql-connector-java:jar:5.1.38:compile
[INFO] \- javax.servlet:javax.servlet-api:jar:3.1.0:compile
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2 seconds
[INFO] Finished at: Sat Mar 26 12:12:32 IDT 2016
[INFO] Final Memory: 24M/515M
[INFO] ------------------------------------------------------------------------
哪裏有沒有提到對servlet-api-2.5.jar
。 我現在注意到它說jar
而不是war
,所以我想我的問題是雙重的: 1. JAR和WAR依賴關係是否不同,如果是的話,如何獲得Maven依賴關係插件來顯示WAR依賴關係? 2.我如何明確告訴Maven 而不是包含servlet-api-2.5.jar
?我已經嘗試在各個地方添加排除,但是因爲我不知道爲什麼它首先出現在哪裏,所以它主要是猜測遊戲,在哪裏放置排除,以及我嘗試過的地方都沒有。
mvn --version
爲referene:
Apache Maven 2.2.1 (rdebian-23)
Java version: 1.8.0_72-internal
Java home: /usr/lib/jvm/java-8-openjdk-amd64/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux" version: "4.4.0-1-amd64" arch: "amd64" Family: "unix"
編輯:我更新到3.3.9 Maven的,我仍然得到完全相同的結果。唯一的區別是依賴樹顯示了各種apache taglibs庫之間的依賴關係,但仍然沒有提到servlet-api-2.5。
你試過提供 您的javax.servlet依賴放?順便說一下,神器不是 servlet-api ? –
如果你是第一個得到它,那麼爲什麼你從第二個地方移除它? –
不,它是[javax.servlet-api](http://search.maven.org/#artifactdetails%7Cjavax.servlet%7Cjavax.servlet-api%7C3.1.0%7Cjar)。將其設置爲「提供」不會改變最終的戰爭。只是要清楚 - 我在戰爭中獲得了2.5 *和* 3.1,而不僅僅是2.5。這只是2.5錯誤,並導致運行時異常。 – Itai