命名JavaMaven项目和生成工件的maven项目的最佳实践
我有一个多模块maven项目,看起来像这样命名JavaMaven项目和生成工件的maven项目的最佳实践,java,maven,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 (prod
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节点项目中,但是当packaging设置为.jar时,似乎我不能拥有子模块-子模块只能通过packaging:pom项目实现
2) 这看起来正常吗?我在遵循最佳实践吗?我在某个地方读到一个项目应该正好产生一个工件
期待听到您的想法,谢谢
注意,项目位于GitHub上:
你发现的任何东西,看起来我现在正在遵循最佳实践,非常渴望听到它 在Maven中,Maven本身(这意味着一项要求)支持的最佳实践是,在您的情况下,父节点
upsilon节点
不应包含任何代码(Maven强制您定义打包pom
)。通常您定义插件(它们的适当版本等)、所有模块的依赖项、配置(编码等)
例如,您在父项中定义了编码:
UTF-8
如果您这样做了,您不需要在子模块中重复,因为它将被继承到子模块
除此之外,在构建中,您没有定义模块之间的任何依赖关系,这似乎是必要的。这可能会导致不可预测的生成结果。例如,您有一个生成tgz的模块,但您不能确定所使用的工件以前是否已构建。所以,定义模块之间的依赖关系,让maven reactor定义执行顺序
因此,对于
规则
一个pom,可以说一个工件或多或少是正确的,因为您已经在使用一个“违反”规则的模块(节点tgz),该模块可以创建多个工件 为什么您总是定义最终名称
?它只适用于目标文件夹,不适用于其他文件夹。