Soy nuevo en Maven y estoy configurando mi primer proyecto de maven. También estoy creando algunos recursos de maven en la forma de algunos poms que también pueden heredarse o usarse como dependencias en futuros proyectos. Quiero agrupar dependencias y poder agregarlas selectivamente a un proyecto según sea necesario.Crear grupos de dependencia en Maven para su reutilización, incluidas las dependencias 'provistas'
Leo this article en pom mejores prácticas. Me gusta la idea de agrupar las dependencias relacionadas en poms y luego agregar el pom como una dependencia a un proyecto según sea necesario. Este enfoque funciona muy bien para compilar dependencias de ámbito. Sin embargo, falla para los ámbitos provistos, ya que como dependencias transitivas, se omiten.
Aquí hay un ejemplo de lo que quiero decir: Digamos que agrupo dependencias web para mis proyectos en un pom.xml de de-webs. Estos incluyen compile
con ámbito dependencias Spring Framework y también un provided
con ámbito JavaEE uno:
<modelVersion>4.0.0</modelVersion>
<groupId>com.xyz</groupId>
<artifactId>mvn-web-deps</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${org.springframework.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${org.springframework.version}</version>
</dependency>
<dependency>
<groupId>javaee</groupId>
<artifactId>javaee-api</artifactId>
<version>${javaee.version}</version>
<scope>provided</scope>
</dependency>
</dependencies>
luego añadir POM como una dependencia en otro proyecto:
<modelVersion>4.0.0</modelVersion>
<groupId>com.xyz</groupId>
<artifactId>project-a</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependency>
<groupId>com.xyz</groupId>
<artifactId>mvn-web-deps</artifactId>
<version>0.0.1-SNAPSHOT</version>
<type>pom</type>
</dependency>
Las dependencias en mvn-web-deps
ahora se convierten en transitiva . Dado que la referencia de dependencia anterior es compile
con ámbito, la dependencia transitiva provided
se omite.
Quiero evitar agregarlos a la sección dependency
de un elemento primario, ya que solo puede haber un elemento primario y un proyecto puede necesitar solo algunos de estos grupos de dependencia, no todos. Quizás pueda agregarlos a la sección dependencyManagement
, pero luego tendré que redeclarar cada dependencia (sin la versión) en cada proyecto secundario.
¿Cuál es la forma correcta/mejor de agrupar dependencias mientras se evitan los problemas como los de arriba?
Gracias por la respuesta. Tal vez no hice que mi motivación para usar tales dependencias agrupadas fuera muy clara. También dividí mis proyectos en módulos. Lo que quiero lograr al agrupar las dependencias relacionadas es la capacidad de administrarlas en un solo lugar y reutilizarlas en todos los proyectos por simple referencia. cont. .. – samitgaur
Tengo un conjunto de tecnologías más o menos fijo que utilizo para desarrollar proyectos web, por ejemplo, en mi organización. Entonces, todos los proyectos web tienen al menos un conjunto común de dependencias que serían obligatorias. Quiero mantenerlos en un solo lugar para que el conocimiento del repositorio, identificación de grupo, identificador de artefactos y números de versión esté localizado y cada desarrollador que inicie un nuevo proyecto web no tiene que preocuparse por ellos y solo puede hacer referencia a estas dependencias de alguna manera . – samitgaur