Remove transitive dependencies from your pom.xml
Prerequistos: Conocimientos básicos de MAVEN y la configuración de las dependencias de un proyecto en el pom.xml.
El objetivo de eliminar las dependencias transitivas es porque no quiero que las dependencias de mis proyectos descarguen sus propias dependencias ya que en la mayoría de casos es innecesaria.
Por ejemplo imaginemos que tenemos el siguiente caso:
- ProyectoPrincipal
- Dependencias
- ProyectoApi
- genera un archivo WAR: ProyectoPrincipal.war
- ProyectoApi
- Dependencias
- ProyectoLibrería
- genera un archivo JAR ProyectoApi.jar.
- ProyectoLibrería
- Dependencias (ninguna)
- genera un archivo JAR: ProyectoLibrería.jar
Con esta estructura de dependencias, cuando miro los JAR que hay en las dependencias de MAVEN del proyecto principal y veo los dos archivos jar.
- ProyectoApi.jar
- ProyectoLibrería.jar
Cuando lo que yo quiero es que sólo aparezca la librería ProyectoApi.jar
Cuando tienes pocos proyectos dependientes puede resultar cómodo pero cuando tienes muchos puede liarte mucho e incluso mezclar archivos jar de otros proyectos que no son necesarios.
Yo prefiero por mi mismo poner el en POM del ProyectoPrincipal las dos dependencias si son necesarias y no que MAVEN lo haga por si mismo.
Para evitar que MAVEN descargue las dependencias transitivas del proyectoApi tenemos que añadir el apartado <exclusions> para evitarlo.
Ejemplo:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.antuansoft</groupId> <artifactId>ProyectoPrincipal</artifactId> <version>1.0.0</version> <groupId>org.antuansoft</groupId> <packaging>war</packaging> <dependencies> <dependency> <artifactId>ProyectoApi</artifactId> <version>1.0.0</version> <exclusions> <exclusion> <groupId>*</groupId> <artifactId>*</artifactId> </exclusion> </exclusions> </dependency> ....... <dependencies> ..... </project>
¿Y si la dependencia es cíclica? (es decir, por ejemplo que 'ProyectoLibrería' tuviese dependencia con 'ProyectoApi')
ResponderEliminarSi tienes una dependencia ciclica maven no te deja compilar.
ResponderEliminarDeberia darte un mensaje de error y tendrias que resolver esa dependencia si quieres que tu proyecto funcione.