【问题标题】:Best practices for naming java maven projects and artifact-producing maven projects命名 java maven 项目和生成工件的 maven 项目的最佳实践
【发布时间】:2013-11-09 10:36:46
【问题描述】:

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

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

【问题讨论】:

  • 你为什么一直定义finalname?它仅适用于目标文件夹。

标签: java maven


【解决方案1】:

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

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-24
    • 2022-11-10
    • 2014-06-10
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 2011-06-08
    相关资源
    最近更新 更多