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).
Desde maven-dependency-plugin 2.10 ( revisión 1649454 , enero de 2015), también puede agregar a la configuración una lista de las ignoredDependencies , las ignoredUnusedDeclaredDependencies y las ignoredUsedUndeclaredDependencies ignoredUnusedDeclaredDependencies ignoredUsedUndeclaredDependencies .
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.