0

我有一个看起来像这样的多模块 Maven 项目;

upsilon-node (packaging: pom)
|--- upsilon-jar (contains the actual source code - .java files, produces a .jar)
|--- upsilon-node-rpm-fedora (produces a Fedora RPM, from the upsilon-jar's .jar)
|--- upsilon-node-rpm-debian (products a Debian DEB, from the upsilon-jar's .jar)
|--- upsilon-node-nsis (produces a .exe installer, from the upsilon-jar's .jar)
|--- (various other packages)

我有两个问题:

1) 对我来说,.java 源代码在逻辑上应该放在父 upsilon-node 项目中,但是当包装设置为 .jar 时,似乎我不能有子模块 - 子模块只能来自包装:pom 项目。

2)这看起来很理智,我在这里遵循最佳实践吗?我在某处读到 1 个项目应该恰好产生 1 个工件。

期待听到你的想法,谢谢!


注意,项目在 GitHub 上:https ://github.com/upsilonproject/upsilon/tree/master/upsilon-node

你发现的任何看起来我现在都在遵循最佳实践的东西,非常渴望听到它。

4

1 回答 1

0

在 Maven 中,最好的实践当然是 Maven 本身支持的(这意味着一个要求)是upsilon-node您的案例中的父级不应包含任何代码(maven 强制您定义打包pom)。通常你定义插件(它们的适当版本等)、所有模块的依赖项、配置(编码等)。

例如,您在父级中定义了编码:

<properties>
  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

如果您这样做了,则无需在子模块中重复该操作,因为它将被继承给子模块。

除此之外,在您的构建中,您没有在模块之间定义任何看似必要的依赖关系。这可能会导致不可预测的构建结果。例如,您有一个生成 tgz 的模块,但您不能确定之前已经构建了使用过的工件。所以定义模块之间的依赖关系让maven reactor定义执行的顺序。

因此,此外,rule可以说一个 pom 一个工件或多或少是正确的,因为您已经在使用一个“违反”规则(node-tgz)的模块,它可以简单地创建多个工件。

于 2013-11-09T12:01:42.163 回答