tests test run plugin mvn example all java maven maven-3 maven-dependency-plugin

java - test - Declare la dependencia de Maven solo como tiempo de ejecución de prueba



mvn test (3)

¿Cuál es la mejor manera de declarar que una dependencia de Maven solo se utiliza para la ruta de clase de tiempo de ejecución de prueba (pero no de compilación de prueba)?

Específicamente, quiero slf4j-api (una fachada de registro) como una dependencia típica de alcance de compilación, pero quiero slf4j-simple (la implementación de barebones adecuada para pruebas unitarias) solo en la ruta de clase de tiempo de ejecución de prueba (no es necesario para la compilación de prueba ). He estado haciendo esto:

<dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-simple</artifactId> <scope>test</scope> </dependency>

Sin embargo, la desventaja de esto es que la dependency:analyze informes slf4j-simple como no utilizados, presumiblemente porque no es necesario para la compilación:

[WARNING] Unused declared dependencies found: [WARNING] org.slf4j:slf4j-simple:jar:1.7.7:test

No puedo usar una dependencia de runtime porque no quiero que esa dependencia se herede de forma transitiva (por ejemplo, las dependencias descendentes pueden usar log4j, etc.). Intenté el runtime con optional=true , pero eso resulta en la misma advertencia.

(Tenga en cuenta que también podría establecer ignoreNonCompile para el complemento de dependencia, pero eso parece ser un instrumento muy contundente que ocultaría otros problemas potenciales).



No hay alcance que haga exactamente lo que quieres aquí; test es la mejor opción disponible.

Se ha solicitado un alcance de test-runtime ( Re: ¿Necesidad de un alcance de prueba-tiempo de ejecución? ) Y la solución sugerida es exactamente la configuración ignoreNonCompile que ya ha descubierto.

dependency:analyze ya tiene algunas limitaciones ( "algunos casos no se detectan (constantes, anotaciones con retención de fuente solamente, enlaces en javadoc)" ). Es posible que tenga que aceptar que las dependencias de test alcance contra las que se advierte son falsos positivos.

( Podría dividir la definición de sus pruebas en un módulo separado, que no slf4j dependencias de implementación slf4j , luego ejecutarlas en otro módulo. No creo que valga la pena).


No hay concepto de prueba-tiempo de ejecución en maven. El único inconveniente real es el análisis de dependencia que identifica estas dependencias de prueba de tiempo de ejecución como no utilizadas. Sin embargo, dado que solo son dependencias de prueba, esto es bastante benigno y no puede causar problemas a otros proyectos que dependen de este proyecto.