Do I need stax-api-1.0.x in my web app when using JDK 1.6?
I am currently developing a web app that uses Jersey for REST. I use maven, and both stax-api-1.0.1 and 1.0.2 are pulled into my web-inf/lib. I thought the stax api were a aprt of JDK1.6?
Why are those JARS included in my web application?
Here is my pom.xml
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.glennbech</groupId>
<artifactId>simplerest</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>Simplerest Maven Webapp. Very simple REST.</name>
<url>http://maven.apache.org</url>
<dependencies>
<!-- Jersey for REST -->
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-server</artifactId>
<version>1.9</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-json</artifactId>
<version>1.9</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.17</version>
</dependency>
</dependencies>
<build>
<finalName>simplerest</finalName>
<plugins>
<plugin>
<groupId开发者_如何学Python>org.mortbay.jetty</groupId>
<artifactId>maven-jetty-plugin</artifactId>
<version>6.1.25</version>
<configuration>
<contextPath>/</contextPath>
<scanIntervalSeconds>5</scanIntervalSeconds>
</configuration>
</plugin>
</plugins>
</build>
This question was answered in the comment field of the question. Kudos to Paul Grime.
stax does come included in Java 1.6, but Maven does not know you are deploying your app to a Java 1.6 runtime. Nor do your dependencies know what runtime you are using. In fact, they may have been specifically written themselves to work with Java 1.5 or even earlier.
Yeah, [fixing it using maven exclusions] would be the easiest solution IMO. A next step could be to create different profiles for different target runtimes. E.g. a "1.6" profile would exclude stax etc, but a "1.5" profile would leave them in.
<dependency>
<groupId>the.thing.that</groupId>
<artifactId>transitively-imports</artifactId>
<version>the.stax.version</version>
<exclusions>
<!-- STAX comes with Java 1.6 -->
<exclusion>
<artifactId>stax-api</artifactId>
<groupId>javax.xml.stream</groupId>
</exclusion>
<exclusion>
<artifactId>stax-api</artifactId>
<groupId>stax</groupId>
</exclusion>
</exclusions>
<dependency>
精彩评论