命名java maven项目和生成工件的maven项目的最佳实践

时间:2013-11-09 10:36:47

标签: java maven

我有一个看起来像这样的多模块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

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

1 个答案:

答案 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)的模块,它只能创建多个工件。