我有一个pom.xml文件,因为我看到他们是同一个<artifactId>
引用的3个依赖项,区别在于标记
<classifier>sources</classifier>
<classifier>javadoc</classifier>
我删除了具有SOURCES/JAVADOC
的依赖项,并且只保留了一个依赖项。我测试了我的应用程序,每件事情都很好。
使用此分类器标记的目的是什么?以及为什么我需要两次复制依赖项才能将<classifier>
标记添加到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>
答案 0 :(得分:51)
分类器区分由相同构建的工件 POM但内容不同。它是一些可选的任意字符串 - 如果存在 - 将附加到工件名称之后 版本号。
答案 1 :(得分:5)
分类器的示例
作为此元素的动机,请考虑一个项目,该项目提供针对JRE 1.8的工件,但同时也是一个仍支持JRE 1.7的工件。第一个工件可以配备分类器jdk18,第二个工件可以配备jdk14,以便客户可以选择使用哪个。
分类器的另一个常见用例是需要将辅助工件附加到项目的主要工件。如果您浏览Maven中央存储库,您会注意到分类器源和javadoc用于部署项目源代码和API文档以及打包的类文件。
答案 2 :(得分:3)
另一个更实用的答案,通过一个例子来帮助更好地理解classifier
的用处。
假设您需要两个版本的工件:for openjpa
和eclipselink
- 比如因为jar包含需要特别增强JPA实现的实体。
您可能对Maven配置文件中定义的这些构建有一些不同的处理,然后使用的配置文件也具有属性<classifier />
。
要构建不同分类的版本,请在pom
中随后配置maven-jar-plugin
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
<configuration>
<classifier>${classifier}</classifier>
</configuration>
</plugin>
安装两者会导致repo中的文件如下:
组织/示例/数据/ 1.0.0 /数据1.0.0.pom
组织/示例/数据/ 1.0.0 /数据-1.0.0-openjpa.jar
org / example / data / 1.0.0 / data-1.0.0-eclipselink.jar
现在只有classifier
才能使用,所以
<dependency>
<groupId>org.example</groupId>
<artifactId>data</artifactId>
<version>1.0.0</version>
<classifier>[openjpa|eclipselink]</classifier>
</dependency>
答案 3 :(得分:1)
它允许区分属于同一个POM但构建方式不同的两个工件,并在版本之后附加到文件名。
例如,如果您的存储库中有其他工件(文档,源...),您可以引用它们并将它们作为依赖项添加到项目中。
在此代码中添加<classifier>sources</classifier>
我们从存储库获取sources.jar。
<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>
实际上,它允许您以更高级别的粒度定位依赖项。
答案 4 :(得分:0)
根据以下内容: https://blog.packagecloud.io/eng/2017/03/09/how-does-a-maven-repository-work/ 分类器标签暗示了&#34;辅助工件&#34;,它的&#34;传递依赖&#34;将被切断! 因此,分类器标签不仅可以改变Maven Coordinate&#34;通过$ artifactId- $ version- $ classifier.jar!