我目前正在将一些项目从 Ant 迁移到 Maven。像我一样墨守成规,我想使用既定的约定来查找
groupId
和 artifactId
,但我找不到任何详细的约定(有一些,但它们没有涵盖我想知道的要点).
以本项目为例,首先是Java包:
com.mycompany.teatimer
Tea Timer实际上是两个词,但是Java包命名约定禁止插入下划线或连字符,所以我把它们写在一起。
我选择了与包裹 ID 相同的
groupId
,因为我认为这是一个好主意。是吗?
最后,我必须选择一个
artifactId
,我目前选择了teatimer
。但是当我查看其他 Maven 项目时,他们使用连字符来分割 artifactId
中的单词,如下所示:tea-timer
。但当连接到 groupId
时,它看起来确实很奇怪:com.mycompany.teatimer.tea-timer
。
你会怎么做?
另一个例子:
套餐名称:
com.mycompany.awesomeinhouseframework
groupId
:com.mycompany.awesomeinhouseframework
(?)
artifactId
:awesome-inhouse-framework
(?)
怪异是非常主观的,我只是建议遵循官方推荐:
groupId、artifactId 和 version 命名约定指南
将在所有项目中唯一标识您的项目, 所以我们需要强制执行命名模式。 它必须遵循包名称 规则,这意味着必须在 至少作为您控制的域名, 您可以创建任意多个子组 如你所愿。 查看更多信息 关于包名称.groupId
例如。
,org.apache.maven
org.apache.commons
确定 groupId 粒度的一个好方法是使用 项目结构。也就是说,如果 当前项目是一个多模块 项目,它应该附加一个新的 父级 groupId 的标识符。
例如。
、org.apache.maven
、org.apache.maven.plugins
org.apache.maven.reporting
是没有版本的 jar 的名称。如果你创建了它 然后你可以选择任何你想要的名字 想要小写字母但没有 奇怪的符号。如果是第三方 jar 你必须采取的名称 jar,因为它是分发的。artifactId
例如。
,maven
commons-math
如果您分发它,那么您可以选择任何典型的 带有数字和点的版本(1.0, 1.1、1.0.1、...)。不要使用日期,因为它们通常与 快照(每晚)构建。如果它是一个 第三方神器,你必须使用 无论它们的版本号是什么, 看起来很奇怪。version
例如。
、2.0
、2.0.1
1.3.1
你的约定似乎很合理。如果我在 Maven 存储库中搜索您的框架,我会在
awesome-inhouse-framework-x.y.jar
组目录中查找 com.mycompany.awesomeinhouseframework
。我会根据你们的约定在那里找到它。
两个简单的规则对我有用:
Maven 应用程序时请考虑以下事项:
groupId
com.companyname
artifactId
project
version
groupId、artifactId 和 version 命名约定指南的官方定义,该定义建议 groupId 必须以您控制的反向域名开头。
com
表示该项目属于公司,
org
表示该项目属于社会组织。这些都可以,但是对于像xxx.tv、xxx.uk、xxx.cn这样奇怪的域名,以“tv.”、“cn.”开头的groupId命名是没有意义的,groupId应该传递基本信息项目的而不是域的。