Tengo un archivo pom.xml y en eso veo que hay 3 dependencias referenciadas para las mismas, <artifactId>
la diferencia está en las etiquetas
<classifier>sources</classifier>
<classifier>javadoc</classifier>
Eliminé las dependencias que tenían 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 clasificadora? y por qué necesito duplicar dependencias dos veces para agregar <classifier>
etiquetas 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>
java
maven
dependency-management
Pushya
fuente
fuente
Otra respuesta más pragmática con un ejemplo para ayudar a comprender la utilidad de lo
classifier
mejor.Suponga que necesita dos versiones de un artefacto: para
openjpa
y paraeclipselink
, por ejemplo, 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 también tienen propiedades
<classifier />
.Para construir las versiones clasificadas de manera diferente, en
pom
elmaven-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 resultaría en archivos en repositorio algo como esto:
Ahora solo sería cuestión de
classifier
cuál uso, así que para OpenJPA, por ejemplo:<dependency> <groupId>org.example</groupId> <artifactId>data</artifactId> <version>1.0.0</version> <classifier>openjpa</classifier> </dependency>
y para EclipseLink cambiaría el clasificador como:
<classifier>eclipselink</classifier>
fuente
[openjpa|eclipselink]
era solo un "selector" para elegir cualquiera.Ejemplo de 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 todavía admite JRE 1.7. El primer artefacto podría estar equipado con el clasificador jdk18 y el segundo con jdk14 de modo que los clientes puedan elegir cuál usar.
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 las fuentes de los clasificadores y javadoc se utilizan para implementar el código fuente del proyecto y los documentos de la API junto con los archivos de clase empaquetados.
fuente
Permite distinguir dos artefactos que pertenecen al mismo POM pero fueron construidos de manera diferente, y se adjunta 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 agregando el
<classifier>sources</classifier>
estamos obteniendo 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.
fuente
De acuerdo con lo siguiente: https://blog.packagecloud.io/eng/2017/03/09/how-does-a-maven-repository-work/, la etiqueta del clasificador implica "Artefacto secundario", que es su "dependencia transitiva" será cortado! Por lo tanto, la etiqueta del clasificador no solo cambia "Maven Coordinate" por $ artifactId- $ version- $ classifier.jar.
fuente