Maven中Classifier标签的用途是什么?

我有一个pom.xml文件,在那里我看到他们是3相关引用相同的<artifactId>不同之处在于标签

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

我删除了具有SOURCES/JAVADOC的依赖关系,只保留了一个依赖关系。 我testing了我的应用程序,每件事情都很好。

使用这个分类器标签的目的是什么? 为什么我需要复制两次依赖关系来为SOURCES/JAVADOC添加<classifier>标签。

  <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> 

分类器允许区分由相同的POM构build但是内容不同的工件。 它是一些可选的和任意的string,如果存在的话,会附加到版本号后面的工件名称。

详情查看http://maven.apache.org/pom.html

分类器示例
作为这个元素的动机,可以考虑一个项目,该项目提供了一个针对JRE 1.8的工件,但同时也是一个仍然支持JRE 1.7的工件。 第一件神器可以装备分类器jdk18,第二件装有jdk14,这样客户可以select使用哪一个。

分类器的另一个常见用例是需要将辅助工件附加到项目的主要工件上。 如果您浏览Maven中央资源库,您将会注意到,分类器资源和javadoc用于部署项目源代码和API文档以及打包的类文件。

它允许区分两个属于相同POM但构build不同的工件,并在版本之后附加到文件名。

例如,如果您的存储库中有其他工件(docs,sources …),则可以引用它们并将它们作为依赖项添加到项目中。 在这段代码中,通过添加<classifier>sources</classifier>我们从repository中获取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> 

实际上它可以让你find你的依赖进一步的粒度级别。

根据以下内容: https : //blog.packagecloud.io/eng/2017/03/09/how-does-a-maven-repository-work/ classifier tag暗示着“次要神器”,其“传递依赖”将被切断! 因此,classifier标签不仅可以通过$ artifactId- $ version- $ classifier.jar改变“Maven Coordinate”!