java - plugin - mojo maven
Dependencia maven sin versiĆ³n (2)
Recientemente he estado trabajando en algunas mejoras en el proyecto desarrollado hace un tiempo y eso es lo que encontré. Una gran cantidad de dependencias en los archivos pom van sin versiones especificadas y, sin embargo, se resuelven. El proyecto consta de 1 módulo raíz y 2 submódulos. Se usa un patrón de agregación, lo que significa que no hay ninguna sección de Administración de dependencias. El proyecto superior simplemente agrega 2 módulos y eso es todo lo que hace. Los subproyectos no se refieren a él como a un padre. Tienen un padre diferente. Lo que no puedo entender es que ni los subproyectos ni sus padres (de hecho, tampoco tiene administración de dependencias) especifican versiones para algunas de las dependencias. Por ejemplo:
<dependency>
<groupId>javax.mail</groupId>
<artifactId>javax.mail-api</artifactId>
</dependency>
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
</dependency>
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>imap</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jul-to-slf4j</artifactId>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
</dependency>
¿Puede alguien ayudarme a resolver esto? Parece que Maven maneja el control de versiones con alguna estrategia predeterminada.
Es imposible que los expertos trabajen sin definir las versiones de los artefactos. Deben definirse en algún lugar de la etiqueta dependencyManagement, ya sea en el submódulo o padre. Por favor revise su jerarquía pom. Use mvn help:effective-pom
en el directorio de submódulos del proyecto. También puede usar mvn dependency:tree
para averiguar qué artefactos, junto con la información completa de los artefactos, incluidos los números de versión, se resuelven en el resultado de la administración de dependencias.
Ok, creo que lo voy a contestar yo mismo. Por supuesto, eché un vistazo a la dependencia: árbol, pero a todas las dependencias que mencioné estaban los miembros de primer nivel del árbol. Lo que no noté de inmediato es que la dependencyManagement
no está presente en el padre, pero está presente en los submódulos y, lo que es más interesante, contiene:
<dependency>
<groupId>io.spring.platform</groupId>
<artifactId>platform-bom</artifactId>
<version>1.0.2.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
Nunca he usado Spring IO Platform antes, así que este es un concepto totalmente nuevo para mí. Resulta que la plataforma incluye bastantes dependencias preconfiguradas: http://docs.spring.io/platform/docs/current/reference/htmlsingle/#appendix-dependency-versions