2

在工作中,有人对特定于 JDK 1.5 的项目进行了大量更改。不幸的是,一些生产环境仍处于 Java 1.4,因此他们求助于创建由 jdk1.4 版本的 /trunk 组成的双分支。

这个 1.4 分支可能至少有一年的生命周期,在此期间主干中的更改会合并到 jdk1.4 分支中。

我被问到的问题是在这种情况下是否有处理 Maven 工件 ID 的最佳实践?显然,最佳实践可能会避免让我们一开始就陷入这种情况,但现在我们……该怎么办?

我们考虑为另一个分支提供一个唯一的工件 ID,例如“myapp-jdk14”,同时保持所有其他标识符字段(groupId、version)同步。这样做有什么明显的缺点吗?

4

3 回答 3

4

事实上,有两种常用的解决方案:

  1. 为工件的名称添加一些特殊的自定义后缀,例如jdk14. 例如,Bouncy CastleSLF4j使用此策略。
  2. 使用分类器,实际上是为诸如区分同一工件的变体(正是您的情况)之类的任务而设计的。

根据我的经验,有趣的是,第一个解决方案确实更常用,尽管第二个解决方案是官方建议的。

就个人而言,我使用第一个解决方案,但是 - 老实说 - 我没有看到一个解决方案相对于另一个解决方案有任何强大的优势(或劣势)。

于 2012-04-29T21:14:51.200 回答
4

You could use a classifier for this:

classifier: The classifier allows to distinguish artifacts that were built from the same POM but differ in their content. It is some optional and arbitrary string that - if present - is appended to the artifact name just after the version number.

As a motivation for this element, consider for example a project that offers an artifact targeting JRE 1.5 but at the same time also an artifact that still supports JRE 1.4. The first artifact could be equipped with the classifier jdk15 and the second one with jdk14 such that clients can choose which one to use.

Source: http://maven.apache.org/pom.html

于 2012-04-29T20:36:27.487 回答
-1

You can use your solution but I would suggest to have different version numbers.

For example:

1.0.X for JDK 1.4
1.1.X for JDK 1.5

That doesn't mean my suggestion is better than yours. Your solution has the advantage to see based on the artifactId which jdk it is for very obviously.

于 2012-04-29T14:39:14.003 回答