Por fin luego de mucho batallar pudimos encontrar el resultado de esta aprieto que tantos lectores de este sitio web han presentado. Si tienes algo que aportar puedes compartir tu información.
Solución:
Creo que en Maven2 no hay forma de lograr esto, porque para eso está la herencia POM. Sin embargo, hay un truco que se me ocurre:
Suponga que tiene derecho a cargar artefactos en su repositorio interno de artefactos. Puede crear un JAR vacío, implementarlo como log4j:log4j, con una versión obviamente anormal (por ejemplo, log4j:log4j:9999). Agregue dicha dependencia en su proyecto-hijo. Luego anulará la dependencia del padre para que dependa de un JAR de hecho vacío.
No conozco una forma de excluir una dependencia, pero puede excluirla de la distribución de destino, pero es un truco. Debe cambiar el alcance de la dependencia a algo que pueda excluir en la distribución final.
Entonces, digamos que mi padre dependía de junit 4.8, en mi pom dices:
junit
junit
4.8
provided
Así que estamos cambiando el alcance a proporcionado. Para obtener una explicación de cómo funciona esto, consulte mi respuesta a NoClassDefFoundError: org/junit/AfterClass durante el procesamiento de anotaciones. Desafortunadamente, esto no afecta la construcción, pero cuando estás copiando las dependencias para la distribución final, puedes usar el excludeScope
elemento de configuración para no copiar la dependencia en la distribución final:
maven-dependency-plugin
copy-libs
package
copy-dependencies
$project.build.directory/lib
provided
Me he encontrado con la misma pregunta como tú. En mi proyecto, llame al padre pom es parent.pom. parent definió log4j, slf4j así:
org.slf4j
slf4j-api
$slf4j-api.version
log4j
log4j
$log4j.version
org.slf4j
jcl-over-slf4j
$slf4j-api.version
org.slf4j
slf4j-log4j12
$slf4j-log4j12.version
proyecto hijo invoca alguna dependencia en child.pom. Pero no quiero la dependencia de log4j-1.2.x y quiero aumentar la versión de slf4j.
Entonces. Agrego la dependencia del padre.
parent
myartifactId
$my parent version
y use exclusiones para quitar el log4j
parent
myartifactId
$my parent version
log4j
log4j
y agregue explícitamente la dependencia de slf4j y log4j2 en child pom
org.slf4j
slf4j-api
1.7.6
org.apache.logging.log4j
log4j-slf4j-impl
2.8.2
org.apache.logging.log4j
log4j-api
2.8.2
org.apache.logging.log4j
log4j-core
2.8.2
com.lmax
disruptor
3.3.4
entonces usa dependencia mvn:árbol para mostrar la lista de dependencias, sigue viendo el log4j
[INFO] +- org.apache.kafka:kafka_2.10:jar:0.8.2.0:compile
[INFO] | +- com.yammer.metrics:metrics-core:jar:2.2.0:compile
[INFO] | +- org.scala-lang:scala-library:jar:2.10.4:compile
[INFO] | +- org.apache.zookeeper:zookeeper:jar:3.4.6:compile
[INFO] | | +- org.slf4j:slf4j-log4j12:jar:1.7.5:compile
[INFO] | | +- log4j:log4j:jar:1.2.17:compile
bueno, agreguemos las exclusiones de esa dependencia… eliminemos a este tipo.
org.apache.kafka
kafka-clients
0.10.1.1
log4j
log4j
luego ejecute el comando nuevamente para verificar la lista de dependencias. ¡OK! claro ~
Espero que te pueda ayudar :>
valoraciones y comentarios
Nos puedes ayudar nuestra ocupación añadiendo un comentario y dejando una puntuación te damos las gracias.