Maven工件和groupId命名

我目前正在把一些项目从Ant转移到Maven。因循守旧,因为我是,我想使用完善的惯例来找到groupIdartifactId,但我找不到任何详细的惯例(有一些,但他们不包括我想知道的点)。

以这个项目为例,首先是Java包:com.mycompany.teatimer

茶计时器实际上是两个单词,但Java包的命名约定禁止插入下划线或连字符,所以我把它们都写在一起。

我选择了与包ID相同的groupId,因为我认为这是一个好主意。是吗?

最后,我必须选择一个artifactId,我目前选择了teatimer。但当我查看其他Maven项目时,它们使用连字符将单词分隔为__abc0,例如:tea-timer。但是当连接到groupId: com.mycompany.teatimer.tea-timer时,它看起来确实很奇怪。

你会怎么做呢?

另一个例子:

包名:com.mycompany.awesomeinhouseframework

__abc0: __abc1 (?)

__abc0: __abc1 (?)

328216 次浏览

奇怪与否是非常主观的,我只是建议遵循官方的建议:

groupId, artifactId和version的命名约定指南

你的惯例似乎是合理的。如果我在Maven repo中搜索您的框架,我会在com.mycompany.awesomeinhouseframework组目录中查找awesome-inhouse-framework-x.y.jar。根据你们的惯例,我可以在这里找到它。

两个简单的规则对我很有用:

  • 针对groupId的reverse-domain-packages(因为这是非常独特的),包含所有关于Java包名称的约束
  • 项目名称为artifactId(请记住,它应该是jar-name友好的,即不包含可能无效的文件名或只是看起来奇怪的字符)

考虑以下构建基本的第一个Maven应用程序:

groupId

  • com.companyname

artifactId

  • 项目

version

  • 0.0.1

然而,我不同意groupId、artifactId和version的命名约定指南的官方定义,它提出groupId必须以你控制的反向域名开始。

com表示该项目属于公司,org表示该项目属于社会组织。这些都是可以的,但是对于那些奇怪的域,比如xxx。电视,xxx。如果以“tv.”,“cn.”开头,groupId的名称是没有意义的,groupId应该提供项目的基本信息,而不是域名。