provided exclusion example dependencymanagement dependency java maven dependency-management

java - example - maven dependency exclusion



¿Cuál es el propósito de la propiedad del clasificador de declaraciones de dependencia de Mavens? (5)

Tengo un archivo pom.xml y veo que son 3 dependencias a las que se hace referencia para el mismo <artifactId> la diferencia está en las etiquetas

<classifier>sources</classifier> <classifier>javadoc</classifier>

He eliminado las dependencias que tenían las SOURCES/JAVADOC y solo mantuve una dependencia. Probé mi aplicación y todo funciona bien.

¿Cuál es el propósito de usar esta etiqueta clasificador? y por qué necesito duplicar las dependencias dos veces para agregar la etiqueta <classifier> con SOURCES/JAVADOC .

<dependency> <groupId>oauth.signpost</groupId> <artifactId>signpost-commonshttp4</artifactId> <version>1.2.1.2</version> <type>jar</type> <scope>compile</scope> </dependency> <dependency> <groupId>oauth.signpost</groupId> <artifactId>signpost-commonshttp4</artifactId> <version>1.2.1.2</version> <type>jar</type> ***<classifier>javadoc</classifier>*** <scope>compile</scope> </dependency> <dependency> <groupId>oauth.signpost</groupId> <artifactId>signpost-commonshttp4</artifactId> <version>1.2.1.2</version> <type>jar</type> ***<classifier>sources</classifier>*** <scope>compile</scope> </dependency>



Ejemplo para clasificador
Como motivación para este elemento, considere, por ejemplo, un proyecto que ofrece un artefacto dirigido a JRE 1.8 pero, al mismo tiempo, también un artefacto que aún admite JRE 1.7. El primer artefacto podría estar equipado con el clasificador jdk18 y el segundo con jdk14 para que los clientes puedan elegir cuál utilizar.

Otro caso de uso común para los clasificadores es la necesidad de adjuntar artefactos secundarios al artefacto principal del proyecto. Si navega por el repositorio central de Maven, notará que los orígenes de los clasificadores y javadoc se utilizan para implementar el código fuente del proyecto y los documentos API junto con los archivos de clase empaquetados.


El clasificador permite distinguir artefactos que fueron construidos desde el mismo POM pero difieren en su contenido. Es una cadena opcional y arbitraria que, si está presente, se agrega al nombre del artefacto justo después del número de versión.

para más detalles, consulte http://maven.apache.org/pom.html


Otra respuesta más pragmática con un ejemplo para ayudar a comprender mejor la utilidad del classifier .

Supongamos que necesita dos versiones de un artefacto: para openjpa y para eclipselink , digamos porque jar contiene entidades que se necesitan para mejorar la implementación de JPA específicamente.

Es posible que tenga un manejo diferente para estas compilaciones definidas en los perfiles de Maven y los perfiles utilizados entonces también tienen la propiedad <classifier /> .

Para construir las versiones clasificadas de forma diferente, en pom el maven-jar-plugin se configuraría a continuación

<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>3.0.2</version> <configuration> <classifier>${classifier}</classifier> </configuration> </plugin>

La instalación de ambos daría como resultado que los archivos en reposen algo como esto:

org / example / data / 1.0.0 / data-1.0.0.pom
org / example / data / 1.0.0 / data-1.0.0-openjpa.jar
org / example / data / 1.0.0 / data-1.0.0-eclipselink.jar

Ahora solo sería cuestión de classifier a cuál usar, entonces

<dependency> <groupId>org.example</groupId> <artifactId>data</artifactId> <version>1.0.0</version> <classifier>[openjpa|eclipselink]</classifier> </dependency>


Permite distinguir dos artefactos que pertenecen al mismo POM pero se construyeron de manera diferente y se anexan al nombre del archivo después de la versión.

Por ejemplo, si tiene otros artefactos en su repositorio (documentos, fuentes ...) puede hacer referencia a ellos y agregarlos a su proyecto como dependencia. en este código al agregar los <classifier>sources</classifier> obtenemos el archivo sources.jar del repositorio.

<dependency> <groupId>oauth.signpost</groupId> <artifactId>signpost-commonshttp4</artifactId> <version>1.2.1.2</version> <type>jar</type> ***<classifier>sources</classifier>*** <scope>compile</scope> </dependency>

en realidad Le permite ubicar sus dependencias con un mayor nivel de granularidad.