【问题标题】:Maven repository orderMaven 仓库顺序
【发布时间】:2016-04-13 05:34:51
【问题描述】:

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

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

【问题讨论】:

  • 它是同一个工件,还是您对其进行了更改,然后使用相同的组/工件/版本重新打包它?看来如果你“分叉”它,你至少应该改变组名,否则这充其量是误导。
  • 易变:将版本更改为更合适的版本;具有相同版本的分叉应该与您分叉的内容相同,对吧?!
  • @Todd 是的,我对其进行了更改,然后使用相同的组/工件/版本重新打包。我的工件被用作 Maven 中心的官方工件的替代品,所以我不想更改工件组/工件 id/版本。
  • 一个聪明人会进来(新人),他认为他可以通过将工件更改为最新版本来解决一大堆问题。去你的改变。为了避免这种情况,但是你自己的group-id下的神器。即使已经说了这么多,如果您不打算将更改提交给社区,我看不出尝试保留原始组/工件 ID 的好处。

标签: java maven jar


【解决方案1】:

在 fork 原始工件时,应使用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,并且尝试在另一台无法访问您的存储库(提供 fork)的计算机上构建它,然后由于使用原话:可维护性是一大收获。
  • 您使用 Maven 标准(见下文)

对于分类器名称(它是一个免费字符串),我经常发现提供附加信息很有用:

  • 如果您在公司工作,请将公司名称添加到分类器中,因此如果合同/外部需要使用它,则立即清楚它是相关公司制造的分叉
  • 如果是补丁或附加功能(或针对特定操作系统或 Java 版本),也请尽量明确说明
  • 使用你的常识,就像它是一个标签,你以后会用它来搜索

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

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

因此,不会出现存储库顺序或任何其他类型的问题,并且您的构建将获得清晰性、可重复性和可维护性。希望对您有所帮助。

【讨论】:

  • 分类器的目的是用不同的方式构建相同的二进制文件。一个很好的例子是添加了调试信息、额外本地化或添加仪器/日志记录的版本。我建议不要以其他方式使用它。
  • @JoD。我想说这是一个有争议的问题,根据我在几家公司看到的经验,相同的用例(分叉/补丁库)和分类器是一个很好的解决方案,至少比重复使用相同的 GAV 好得多,这曾经真的导致了混乱并且不容易进行故障排除,因为您只是丢失了信息,而使用分类器可以清楚地说明:相同的 GAV,修补/分叉版本,这与那里的许多用例相似(相同的 GAV,jdk4 版本或相同的 GAV,Linux 版本, 64位版本等)。
  • @ADiMatteo 看到我对 OP 的评论关于“聪明/新人”的到来。如果他们是你的变化,而不是社区的变化,那么不要把它放在同一个组/工件-身份空间。但仍然为您的不同用例添加分类器,这仍然存在。
  • @JoD。我仍然认为更改 GAV 会导致可追溯性的丧失。 ArtifactId 可能还不够,查看我想从您的补丁的确切来源(哪个组、工件和版本)中查看的依赖项,这样如果我愿意,我也可以稍后针对较新的版本进行测试,看看我是否仍然需要你的补丁(当然,考虑到良好的非回归测试),但我知道这是官方 GAV 的补丁。再次,这是一个争论的焦点。根据经验,我更喜欢这种方法。另外,请记住,使用分类器不会是相同的 GAV,而是新的 GAVC(即唯一的)。
  • @ADiMatteo。好吧,仍然不是粉丝,但对于相同的 G/A id,分类器至少要好得多。不同/添加的分类器对于“新”人来说将是一个很好的视觉提示。我承认。
猜你喜欢
  • 1970-01-01
  • 2014-03-06
  • 1970-01-01
  • 1970-01-01
  • 2011-05-06
  • 1970-01-01
  • 2017-05-02
  • 1970-01-01
  • 2012-06-01
相关资源
最近更新 更多