我有一个看起来像这样的多模块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源代码应该逻辑地进入父upilon-node项目,但是当打包设置为.jar时,似乎我不能有子模块 - 子模块只能从包装:pom项目。
2)这看起来是否合理,我是否遵循最佳做法?我在某处看到1个项目应该产生1个工件。
期待听到您的想法,谢谢!
注意,项目在GitHub上:https://github.com/upsilonproject/upsilon/tree/master/upsilon-node
你发现的任何东西看起来我现在都遵循最佳实践,非常渴望听到它。
答案 0 :(得分:0)
在Maven中,最好的做法当然是由Maven本身支持(这意味着一个要求)是你的案例中的父upsilon-node
不应该包含任何代码(maven强制你定义打包pom
)。通常你定义插件(它们适当的版本等),所有模块的依赖关系,配置(编码等)。
例如,您在父级中定义了编码:
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
如果你这样做了,你不需要在你的子模块中重复这一点,因为它将被继承给孩子们。
除了在您的构建中,您没有定义模块之间的任何依赖关系,这似乎是必要的。这可能导致不可预测的构建结果。例如,您有生成tgz的模块,但您无法确定之前是否已构建使用过的工件。因此,定义模块之间的依赖关系,让maven reactor定义执行的顺序。
因此,对于rule
一个pom,可以说一个工件或多或少都是真的,因为你已经在使用一个“违反”规则(node-tgz)的模块,它只能创建多个工件。