Ich erstelle eine Webanwendung mit Maven, und ich habe ein Problem - aus irgendeinem Grund bekomme ich servlet-api-2.5.jar
enthalten, die seltsame Ausnahmen gibt. Das Entfernen dieser Datei aus dem WAR-Archiv löst alle Probleme, aber ich versuche zu verstehen, warum es in erster Linie dort ist. Meine Abhängigkeiten in der vollständige pom.xml
Datei ist:Maven: Warum bekomme ich 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>
Und läuft mvn dependency:tree -Dverbose
ergibt:
[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] ------------------------------------------------------------------------
Wo gibt es keine Erwähnung für servlet-api-2.5.jar
. Ich merke jetzt, es sagt jar
und nicht war
, also meine Frage ist zweifach: 1. Sind die JAR und WAR Abhängigkeiten unterschiedlich, und wenn ja wie bekomme ich Maven Abhängigkeits-Plugin, um mir die WAR-Abhängigkeiten zu zeigen? 2. Wie kann ich Maven und nicht explizit mitteilen, dass servlet-api-2.5.jar
eingeschlossen werden soll? Ich habe versucht, an verschiedenen Stellen einen Ausschluss hinzuzufügen, aber da ich nicht weiß, warum es überhaupt da ist, ist es meistens ein Ratespiel, wo man den Ausschluss setzen kann, und keiner der Orte, die ich ausprobiert habe, hat funktioniert.
mvn --version
für 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"
Edit: ich Maven aktualisiert 3.3.9 und ich immer noch genau das gleiche Ergebnis erhalten. Der einzige Unterschied besteht darin, dass der Abhängigkeitsbaum Abhängigkeiten zwischen den verschiedenen Apache-Taglibs-Bibliotheken zeigt, aber immer noch keine Erwähnung von servlet-api-2.5.
Haben Sie auf Ihre javax.servlet Abhängigkeit zur Verfügung gestellt zu setzen versucht? Übrigens ist das Artefakt nicht Servlet-Api ? –
Wenn Sie es an erster Stelle bekommen, warum haben Sie es von der Sekunde entfernt? –
Nein, es ist [javax.servlet-api] (http://search.maven.org/#artifactdetails%7Cjavax.servlet%7Cjavax.servlet-api%7C3.1.0%7Cjar). Wenn sie auf "bereitgestellt" gesetzt wird, ändert sich der resultierende Krieg nicht. Nur um klar zu sein - ich bekomme sowohl 2,5 * als auch * 3,1 im Krieg, nicht nur 2,5. Es ist nur, dass 2.5 falsch ist und Laufzeitausnahmen verursacht. – Itai