Maven存储库顺序

时间:2016-01-08 13:52:03

标签: java maven jar

我有一个存储在repo.maven.apache.org中的fork工件,它具有相同的组,工件ID和版本。我的fork存储在my.repo.hostname。

如何强制Maven使用我的存储库中的工件,而不是来自Maven Central?

1 个答案:

答案 0 :(得分:3)

分叉原始工件时,应使用classifiers进行区分。

所以,如果原始工件是:

<dependency>
    <groupId>com.sample</groupId>
    <artifactId>library</artifactId>
    <version>1.0</version>
</dependency>

你可以把你的叉子作为:

<dependency>
    <groupId>com.sample</groupId>
    <artifactId>library</artifactId>
    <version>1.0</version>
    <classifier>myfork</classifier>
</dependency>

这种方法的优点:

  • 您可以使用原始Maven坐标保持可追溯性,因此可以清楚地显示叉子的位置
  • 您明确表示它是该特定工件的特定版本的不同版本(或分支)
  • 如果其他人正在查看您的POM,并且尝试在另一台机器中构建它而无法访问您的存储库(提供分支)然后具有不同的行为甚至错误,那么您不会产生混淆使用原来的:可维护性是一个很大的收获。
  • 您使用Maven标准(见下文)

对于分类器名称(它是一个自由字符串),我经常发现提供其他信息很有用:

  • 如果您在公司工作,请将公司名称添加到分类器中,因此如果合同/外部需要使用它,很明显它是由相关公司制作的分支
  • 如果它是补丁或附加功能(或特定操作系统或Java版本),请尝试清楚说明
  • 使用您的常识,就好像它是一个标签,稍后您将用于搜索

在这种情况下使用分类器它也是Maven推荐的方法,来自official documentation

  

分类器允许区分从同一POM构建但内容不同的工件。它是一些可选的任意字符串 - 如果存在 - 将附加到版本号之后的工件名称。

因此,不会出现存储库订单或任何其他类型的问题,您的构建将获得清晰度,可重复性和可维护性。希望它可能有所帮助。