Hvordan kan jeg be Maven 2 om å laste inn Servlet 3.0 API?
Jeg har prøvd:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>3.0</version>
<scope>provided</scope>
</dependency>
Jeg bruker http://repository.jboss.com/maven2/, men hvilket repository ville vært riktig?
Tillegg:
Det fungerer med en avhengighet for hele Java EE 6 API og følgende innstillinger:
<repository>
<id>java.net</id>
<url>http://download.java.net/maven/2</url>
</repository>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>6.0</version>
<scope>provided</scope>
</dependency>
Jeg foretrekker å bare legge til Servlet API som avhengighet, men "Brabster" kan ha rett i at separate avhengigheter er erstattet av Java EE 6 Profiles. Finnes det en kilde som bekrefter denne antagelsen?
Jeg foretrekker å bare legge til Servlet API som avhengighet,
For å være ærlig er jeg ikke sikker på hvorfor, men det spiller ingen rolle...
Brabster]1 separate avhengigheter har blitt erstattet av Java EE 6 Profiles. Finnes det en kilde som bekrefter denne antagelsen?
Maven-repositoriet fra Java.net tilbyr faktisk følgende artefakt for WebProfile:
<repositories>
<repository>
<id>java.net2</id>
<name>Repository hosting the jee6 artifacts</name>
<url>http://download.java.net/maven/2</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-web-api</artifactId>
<version>6.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
Denne jar-filen inneholder Servlet 3.0, EJB Lite 3.1, JPA 2.0, JSP 2.2, EL 1.2, JSTL 1.2, JSF 2.0, JTA 1.1, JSR-45, JSR-250.
Men så vidt jeg vet, er det ingenting som tilsier at disse API-ene ikke vil bli distribuert separat (i java.net repository eller et annet sted). For eksempel (ok, det kan være et spesielt tilfelle) er JSF 2.0 API tilgjengelig separat (i java.net repository):
<dependency>
<groupId>com.sun.faces</groupId>
<artifactId>jsf-api</artifactId>
<version>2.0.0-b10</version>
<scope>provided</scope>
</dependency>
Og faktisk kan du hente javax.servlet-3.0.jar
fra der og installere den i ditt eget repository.
Når du legger til javaee-(web)-api som en avhengighet, får du dessverre ikke Javadoc eller Source til Servlet Api slik at du kan bla gjennom dem i IDE. Dette gjelder også for alle andre avhengigheter (JPA, EJB, ...). Hvis du trenger Servlet API-kildene/javadoc, kan du legge til følgende i pom.xml (fungerer i hvert fall for JBoss&Glassfish):
Repository:
<repository>
<id>jboss-public-repository-group</id>
<name>JBoss Public Repository Group</name>
<url>https://repository.jboss.org/nexus/content/groups/public/</url>
</repository>
Avhengighet:
<!-- Servlet 3.0 Api Specification -->
<dependency>
<groupId>org.jboss.spec.javax.servlet</groupId>
<artifactId>jboss-servlet-api_3.0_spec</artifactId>
<version>1.0.0.Beta2</version>
<scope>provided</scope>
</dependency>
Jeg fjernet javaee-api helt fra avhengighetene mine og erstattet det med de enkelte delene (javax.ejb, javax.faces, ...) for å få kildene og Javadocs for alle deler av Java EE 6.
EDIT:
Her er den tilsvarende Glassfish-avhengigheten (selv om begge avhengighetene skal fungere, uansett hvilken appserver du bruker).
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.servlet</artifactId>
<version>3.0</version>
<scope>provided</scope>
</dependency>
Jeg fant et eksempel på en POM for Servlet 3.0 API på DZone fra september.
Foreslår at du bruker java.net repo, på http://download.java.net/maven/2/.
Det finnes Java EE API-er der, for eksempel http://download.java.net/maven/2/javax/javaee-web-api/6.0/ med POM som ser ut som de kan være det du er ute etter, for eksempel:
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-web-api</artifactId>
<version>6.0</version>
</dependency>
Jeg antar at versjonskonvensjonene for API-ene har blitt endret for å matche versjonen av den generelle EE-spesifikasjonen (dvs. Java EE 6 vs. Servlets 3.0) som en del av de nye 'profilene'. Hvis du ser i JAR-filen, ser det ut til at alle 3.0-servlet-tingene er der. God fornøyelse!