utiliza tutorial que proyecto probar para limpiar introduccion instalar español dependencias compilar comandos java maven dependencies pom.xml

java - tutorial - ¿Por qué el número de versión en la dependencia de maven se omite a veces?



maven tutorial (2)

Soy bastante nuevo en las capacidades de maven. He visto que en pom.xml donde se colocan las dependencias, a veces, solo se mencionan el ID de grupo y artefacto y se omite la versión. ¿Por qué es esto? Por ejemplo, la siguiente dependencia es del sitio web springsource http://spring.io/guides/gs/authenticating-ldap/

<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-ldap</artifactId> <version>3.2.4.RELEASE</version> </dependency> <dependency> <groupId>org.apache.directory.server</groupId> <artifactId>apacheds-server-jndi</artifactId> <version>1.5.5</version> </dependency> </dependencies>

Pero en otra parte de stackoverflow también se mencionó que la versión no es opcional. Me alegraría si alguien pudiera explicar esto.


Algunas adiciones a la excelente respuesta de coderplus :

En un proyecto de varios módulos, se considera una buena práctica configurar los artefactos utilizados por el proyecto en la dependencyManagement de dependencyManagement de la raíz pom.xml para que no tenga que escribir versiones en el módulo secundario pom.xml s ( como en algunas dependencias en tu ejemplo).

También se considera una buena práctica declarar versiones de las bibliotecas externas que usa como propiedades y luego usar estas propiedades en dependencyManagement/dependencies/dependency/version . Esto se hace más o menos aquí :

<properties> <logback.version>1.1.2</logback.version> </properties> <dependencyManagement> <dependencies> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>${logback.version}</version> </dependency> </dependencies> </dependencyManagement>

En un proyecto de varios módulos, también debe declarar sus propios artefactos en la gestión de dependencyManagement .

Pero, por favor, no escriba la versión explícitamente (como hace la gente de Spring aquí ), use ${project.version} lugar.

Entonces hubiera sido mejor escribir:

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot</artifactId> <version>${project.version}</version> </dependency>

en lugar de

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot</artifactId> <version>1.2.0.BUILD-SNAPSHOT</version> </dependency>

aquí .

Todo el propósito es SECO , no te repitas. Cuantas más declaraciones redundantes tengas en tus POM, más difícil será atacarlos. Buscar las dependencias obsoletas es muy divertido.


Sí, la versión no es opcional.

Considere una aplicación multimodular que tiene 10 módulos, digamos module1, module2 .. module10. Supongamos que todos estos 10 proyectos usan spring-boot-starter-web . En caso de que estos 10 módulos sean interdependientes, es posible que desee utilizar la misma versión de spring-boot-starter-web en cada uno de estos 10.

Ahora imagine lo complicado que sería mantener el mismo número de versión en todos estos 10 archivos pom y luego actualizarlos cuando quiera usar una versión más reciente de spring-boot-starter-web . ¿No sería mejor si esta información se puede gestionar de forma centralizada?

Maven tiene algo conocido como una etiqueta <dependencyManagement/> para evitar esto y centralizar la información de dependencia.

Para el ejemplo que ha proporcionado, debajo del conjunto de enlaces le ayudará a comprender cómo se resuelve el número de versión aunque no esté presente en el pom que está mirando.

Mire la etiqueta principal del pom que está viendo ( https://github.com/spring-guides/gs-authenticating-ldap/blob/master/complete/pom.xml )

Ahora vamos a ese padre y veremos si las versiones están especificadas en la sección de gestión de dependencias de ese pom ( https://github.com/spring-projects/spring-boot/blob/master/spring-boot-starters/spring-boot -starter-parent / pom.xml ). No, no está definido allí también. Ahora veamos al padre de los padres. https://github.com/spring-projects/spring-boot/blob/master/spring-boot-dependencies/pom.xml . Oh sí, tenemos los números de versión allí.

De forma similar a la gestión de dependencias, los complementos se pueden administrar en la sección pluginManagement del pom.

Espero que lo explique.

Consulte: dependencyManagement , pluginManagement