2011-09-10 11 views
7

Obecnie tworzę aplikację internetową, która używa Jersey do REST. Używam maven, a oba stax-api-1.0.1 i 1.0.2 są wciągana do mojej sieci-inf/lib. Myślałem, że stax api były aprtem JDK1.6?Czy potrzebuję stax-api-1.0.x w mojej aplikacji internetowej podczas korzystania z JDK 1.6?

Dlaczego te JARS są zawarte w mojej aplikacji internetowej?

Oto moja 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>org.mortbay.jetty</groupId> 
       <artifactId>maven-jetty-plugin</artifactId> 
       <version>6.1.25</version> 
       <configuration> 
        <contextPath>/</contextPath> 
        <scanIntervalSeconds>5</scanIntervalSeconds> 
       </configuration> 
      </plugin> 
     </plugins> 

</build> 

+0

Możesz opublikować pom.xml? To zależy (hur hur) od twoich zależności. –

+0

Umieściłem mój plik pom.xml, ale moje pytanie brzmi, dlaczego potrzebowałbym słoików Stax-api w mojej web-inf lib. Myślałem, że stax był częścią JDK1.6? –

+2

Stax jest zawarty w Javie 1.6, ale Maven nie wie, że wdrażasz aplikację do środowiska wykonawczego Java 1.6. Ani twoje zależności nie wiedzą, z jakiego środowiska wykonawczego korzystasz. W rzeczywistości mogły one zostać napisane specjalnie do pracy z Javą 1.5 lub nawet wcześniej. –

Odpowiedz

6

to pytanie odpowiedział w polu komentarza w pytaniu. Kudos do Paula Grime'a.

Stax jest dostępny w Javie 1.6, ale Maven nie wie, że wdrażasz aplikację do środowiska wykonawczego Java 1.6. Ani twoje zależności nie wiedzą, z jakiego środowiska wykonawczego korzystasz. W rzeczywistości mogły one zostać napisane specjalnie do pracy z Javą 1.5 lub nawet wcześniej.

Tak, [ustalenie go za pomocą wyłączeń z maven] byłoby najłatwiejszym rozwiązaniem IMO. Następnym krokiem może być utworzenie różnych profili dla różnych docelowych środowisk wykonawczych. Na przykład. A "1.6" profil wyklucza Stax etc, ale "1.5" profil by pozostawić je w.

5
<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> 
+0

To jest (prawdopodobnie) poprawne rozwiązanie mojego problemu. Dzięki. –

Powiązane problemy