我目前正在将一些项目从 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 和版本 groupId 的命名约定指南将在所有项目中唯一标识您的项目,因此我们需要强制实施命名模式。它必须遵循包名称规则,这意味着它必须至少是您控制的域名,并且您可以根据需要创建任意数量的子组。查看有关包名称的更多信息。例如。 org.apache.maven, org.apache.commons 确定 groupId 粒度的一个好方法是使用项目结构。也就是说,如果当前项目是一个多模块项目,它应该将一个新的标识符附加到父级的 groupId。例如。 org.apache.maven, org.apache.maven.plugins, org.apache.maven.reporting artifactId 是没有版本的jar的名字。如果你创建了它,那么你可以选择任何你想要的名字,小写字母,没有奇怪的符号。如果它是第三方 jar,则必须在分发时使用 jar 的名称。例如。 maven,commons-math 版本,如果你分发它,那么你可以选择任何带有数字和点的典型版本(1.0、1.1、1.0.1、...)。不要使用日期,因为它们通常与 SNAPSHOT(每晚)构建相关联。如果它是第三方工件,无论它是什么,你都必须使用他们的版本号,并且看起来很奇怪。例如。 2.0、2.0.1、1.3.1
你的约定似乎是合理的。如果我在 Maven 存储库中搜索您的框架,我会在 com.mycompany.awesomeinhouseframework
组目录中查找 awesome-inhouse-framework-x.y.jar
。我会根据你的约定在那里找到它。
两个简单的规则对我有用:
groupId 的 reverse-domain-packages (因为它们非常独特)具有有关 Java 包名称的所有约束
项目名称为 artifactId(请记住,它应该是 jar 名称友好的,即不包含可能对文件名无效或看起来很奇怪的字符)
考虑以下构建基本的第一个 Maven 应用程序:
groupId
com.companyname
artifactId
项目
version
0.0.1
com.my.company.project
作为 groupId
还是 com.client.company.project
?
但是,我不同意 Guide to naming conventions on groupId, artifactId, and version 的官方定义,该定义建议 groupId 必须以您控制的反向域名开头。
com
表示该项目属于公司,org
表示该项目属于社会组织。这些都可以,但是对于像xxx.tv,xxx.uk,xxx.cn这样的陌生域名,groupId以“tv.”,“cn.”开头的名称是没有意义的,groupId应该传递基本信息项目而不是域。
myuser
,您的存储库称为 myrepo
,则只需使用包名称 com.github.myuser.myrepo
。这是免费的,而且仍然是独一无二的。
不定期副业成功案例分享
package
呢?与 groupId 有什么区别?