2013-10-22 56 views
0

什么是放置平台/架构信息的最佳地点?在Maven工件中编码体系结构的最佳实践?

我的诱惑是由前缀架构代号的版本,使用的版本领域,因为这似乎是最简单的通配符,也将防止意外混合和不同平台的匹配:

version = <architecture>-<version>[-<branch>] 

或者,可以将体系结构附加到工件ID:

artifactId = <name>-<architecture> 

两种方式都会导致相同的工件名称。

其他人做了什么,为什么?

回答

1

如果您正在独立开发不同架构,这些解决方案中的任何一种都可能是好的。不过,您可能会遇到这样的情况,即版本号在不同体系结构中是相同的。如果你正在为相同的代码库构建不同的体系结构,例如,要么你有一个内置于不同可分配内容的工件,或者你拥有不同的工件,这些工件依赖于相同的公用内核。在这种情况下,您不希望使用体系结构或分支信息来污染版本号,因为它会使Maven无法将其视为相同的版本。为此建议的解决方案是使用分类器。由于每Maven POM Reference

分类: 分类器允许区分是 来自同一POM建造,但其含量不同的工件。这是一些 可选和任意的字符串,如果存在的话,会附加到版本号后面的 工件名称。

至于该元素的动机,例如考虑一个项目, 提供了一个假象目标JRE 1.5,但同时也是一个 神器仍然支持JRE 1.4。第一个工件可以是 ,配备分类器jdk15,第二个工件可以是jdk14如 ,客户可以选择使用哪一个。

+0

使用体系结构作为分类器的一个问题是,体系结构之间的打包和依赖关系可能会有所不同。我看到你仔细地提到“从同一个POM构建”,但通常情况并非如此。如果可以合并POM,这将是_nice_,但是我担心我们必须将体系结构编码到版本中。 –

+0

使用不同的分类器并不排除您使用不同类型(以解决包装的差异)。我同意,依赖关系的差异可能会成为一个突破点,而不是如此多地使用“分类器”,而是在“从同一个POM构建”中,正如你所观察到的那样。 –

+0

也许我使用的是发布ant任务错误,但我的观察是,如果我使用分类器和不同的打包类型,最后一次上传“胜出”并为整个集合声明打包类型,这有效地呈现使用不同的体系结构包装类型通过maven'y方法无法访问(如果您知道url或自己构建url,您仍可以获取它们,但POM不会显示它们)。 –