Mavens 依赖项声明分类器属性的用途是什么?

2022-08-31 11:17:00

我有一个pom.xml文件,在我看到有3个依赖项引用相同,差异在于标签<artifactId>

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

答案 1

分类器可区分从相同 POM 构建但内容不同的工件。它是一些可选的任意字符串(如果存在),则附加到版本号后面的项目名称。


答案 2

另一个更务实的答案是通过一个例子来帮助理解更好的有用性。classifier

假设您需要两个版本的工件:for 和 for - 例如,因为 jar 包含需要专门增强 JPA 实现的实体。openjpaeclipselink

对于在 Maven 配置文件中定义的这些构建,您可能有一些不同的处理方式,然后使用的配置文件也具有属性 。<classifier />

要构建不同分类的版本,请在pommaven-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>

同时安装两者将导致存储库中的文件如下所示:

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

现在,只需考虑使用哪一个,例如,对于OpenJPA:classifier

<dependency>
   <groupId>org.example</groupId>
   <artifactId>data</artifactId>
   <version>1.0.0</version>       
   <classifier>openjpa</classifier>
</dependency>

对于EclipseLink,你可以将分类器切换为:

<classifier>eclipselink</classifier>

推荐