2012-06-18 16 views
14

Tengo la siguiente dependencia en mi pom.xml, por lo que mi IDE (IntelliJ) tiene las clases servlet-api disponibles durante la compilación, pero no se proporcionan en la compilación.Excluir servlet-api del ámbito de prueba Maven

<dependency> 
    <groupId>javax.servlet</groupId> 
    <artifactId>servlet-api</artifactId> 
    <version>3.0-alpha-1</version> 
    <scope>provided</scope> 
</dependency> 

Pero proporcionado alcance agrega las clases en esta dependencia a la ruta de clase cuando se ejecuta en el alcance de prueba, eso es un problema para el embarcadero, que empiezo mediante programación. Puesto que ya lo tiene en su biblioteca Puedo obtener un

java.lang.SecurityException: class "javax.servlet.FilterRegistration"'s signer information does not match signer information of other classes in the same package 

Si quito esta dependencia el servidor embarcadero se inicia correctamente en su alcance prueba, pero necesito esta dependencia para IntelliJ para compilar el código. ¿Cuál es la mejor manera de resolver esto? ¿Hay alguna manera de excluir esta dependencia para el alcance de la prueba?

Respuesta

5

tratar de configurarlo para compilar alcance

+0

gracias, eso lo resolvió! –

+0

Me perdí aquí, ¿puedes elaborar un poco más? ¿Qué significa "alcance de compilación"? – xhudik

+0

compile scope significa que incluye los archivos de la biblioteca jar solo durante el proceso de compilación de los archivos java. – Raman

3

he encontrado la solución cuando se trata de no incluir javax.servlet-api en la ruta de clase realizar una prueba JUnit. En realidad moví el servlet-api al final de los frascos en el classpath y vino la iluminación ...

Utilicé la versión incorrecta del servlet-api. Estaba usando 2.5 pero necesitaba 3.0. Alcance de Maven Escojo "proporcionado". Funciona para ejecutar junit dentro de eclipse y para la ejecución de "mvn test".

Sin embargo, no entiendo por qué no hay conflicto. Si lo hice bien, incluso las dependencias "proporcionadas" quedarán expuestas en el classpath cuando se prueban, por lo que podría haber un conflicto, o, por supuesto, si toco exactamente las versiones correctas del servlet-api utilizado para la compilación y el embarcadero. servlet-api entonces no hay conflicto.

De todos modos, me funciona.

Aquí es mi dependencias/* pom-configuración para api embarcadero + servlet:

<dependency> 
    <groupId>org.eclipse.jetty</groupId> 
    <artifactId>jetty-server</artifactId> 
    <version>8.1.4.v20120524</version> 
    <type>jar</type> 
    <scope>test</scope> 
</dependency> 

<dependency> 
    <groupId>org.eclipse.jetty</groupId> 
    <artifactId>jetty-servlet</artifactId> 
    <version>8.1.4.v20120524</version> 
    <type>jar</type> 
    <scope>test</scope> 
</dependency> 

<dependency> 
    <groupId>org.eclipse.jetty</groupId> 
    <artifactId>jetty-webapp</artifactId> 
    <version>8.1.4.v20120524</version> 
    <type>jar</type> 
    <scope>test</scope> 
</dependency> 

<dependency> 
    <groupId>org.eclipse.jetty</groupId> 
    <artifactId>jetty-jsp</artifactId> 
    <version>8.1.4.v20120524</version> 
    <type>jar</type> 
    <scope>test</scope> 
</dependency> 

<dependency> 
    <groupId>javax.servlet</groupId> 
    <artifactId>javax.servlet-api</artifactId> 
    <version>3.0.1</version> 
    <scope>provided</scope> 
</dependency> 
7

simplemente he tenido este problema a mí mismo y quería compartirlo:

  • La dependencia de javax.servlet:servlet-api:3.0-alpha-1, con alcance provided , para que no interfiera con el contenedor, mi WAR se implementa finalmente en
  • Dependencia en org.eclipse.jetty:jetty-webapp, con ámbito test, para que pueda ejecutar Jetty Serv er como parte de mi unidad de prueba
  • Posteriormente una dependencia transitiva en org.eclipse.jetty.orbit:javax.servlet:3.0.0.v201112011016, que necesita jetty-webapp

Exclusión de jetty.orbit:javax.servlet hay ninguna opción (para mí) porque embarcadero Server necesitaba un javax.servlet.HttpConstraintElement que no es ofrecido por javax.servlet:servlet-api:3.0-alpha-1.Terminé haciendo esto:

  1. eliminar la dependencia en javax.servlet:servlet-api
  2. Agregar explícitamente la dependencia de jetty.orbit:javax.servlet, con alcance provided, por lo tanto, sustituir completamente javax.servlet:servlet-api

no sé cuál es el trato con el HttpConstraintElement que necesitaba; quizás estará disponible en futuras versiones de javax.servlet:servlet-api, lo que sorta parece ser una dependencia preferible sobre la implementación de Jetty de la misma.

Editar:

Por cierto, el problema quedó introducido por mí por jugueteando con la configuración de un plugin que automáticamente da formato a archivos de POM. Reordenaba las dependencias y, como tal, funciona en contra de la solución de otro cartel para reordenar el archivo POM. En mi vasta experiencia de Maven: si eres "dependiente" del orden de tus dependencias, eso es , un gran olor.

3

Para mí llegó el mismo error. Encontré la versión anterior de Servlet (2.5) en mi camino junto con servlet 3.0. Una vez que elimino (excluyo) la versión anterior, mi problema fue resuelto.

0

También lo puedes tener con una mezcla de dependencias grizzly y embarcadero.

0

Las exclusiones no fueron suficientes en mi caso, pero la degradación del embarcadero a 7.6.14.v20131031 me funciona.

1

utilizo el siguiente proyecto de ajuste SBT para solucionar un problema similar:

"any dependency program that includes servlet-api java library code" % excludeAll ExclusionRule(organization = "org.eclipse.jetty.servlet-api"), 
    "org.mortbay.jetty" % "servlet-api" % "3.0.20100224" 
-1

Para los usuarios Gradle, una configuración con embarcadero ejecuta una aplicación web embebido basado en la primavera WebMVC trabaja con las siguientes dependencias:

apply plugin: 'war' 
apply plugin: 'jetty' 
apply plugin: 'eclipse-wtp' 
dependencies { 

    // Logging support 
    compile 'org.slf4j:slf4j-api:1.7.7' 
    runtime 'org.slf4j:slf4j-simple:1.7.7' 

    // Spring WebMVC part 
    compile 'org.springframework:spring-web:4.0.6.RELEASE' 
    compile 'org.springframework:spring-webmvc:4.0.6.RELEASE' 
    compile 'org.springframework:spring-context:4.0.6.RELEASE' 
    compile 'org.springframework:spring-core:4.0.6.RELEASE' 
    compile 'org.springframework:spring-beans:4.0.6.RELEASE' 
    compile 'org.springframework:spring-expression:4.0.6.RELEASE' 

    // Jetty support 
    compile 'org.eclipse.jetty:jetty-server:8.1.4.v20120524' 
    compile 'org.eclipse.jetty:jetty-servlet:8.1.4.v20120524' 
    compile 'org.eclipse.jetty:jetty-webapp:8.1.4.v20120524' 
    compile 'org.eclipse.jetty:jetty-jsp:8.1.4.v20120524' 

    // Web Container interaction 
    //providedCompile 'javax.servlet:servlet-api:2.5' 
    runtime 'jstl:jstl:1.2' 

    // Unit Testing 
    testCompile 'junit:junit:4.11' 
    testCompile 'org.mockito:mockito-all:1.9.5' 
    testCompile 'org.springframework:spring-test:3.2.0.RELEASE' 
} 
Cuestiones relacionadas