Maven神器和groupId命名
我目前正在将一些项目从Ant移植到Maven。 就我而言,我想用完善的约定来寻找groupId
和artifactId
,但是我找不到任何详细的约定(有一些,但是他们没有涵盖我想知道的要点)。
以这个项目为例,首先是Java包: com.mycompany.teatimer
茶定时器实际上是两个字,但Java包命名约定禁止插入下划线或连字符,所以我一起写。
我select了与包ID相同的groupId
,因为我认为这是个好主意。 是吗?
最后,我必须select一个artifactId
,我现在去teatimer
。 但是当我查看其他Maven项目时,他们使用连字符来分割artifactId
的单词,例如: tea-timer
。 但是,当连接到groupId
: com.mycompany.teatimer.tea-timer
时,它看起来很奇怪。
你会怎么做?
另一个例子:
包名称: com.mycompany.awesomeinhouseframework
groupId
: com.mycompany.awesomeinhouseframework
(?)
artifactId
: awesome-inhouse-framework
(?)
你的约定似乎是合理的。 如果我在Maven awesome-inhouse-framework-xyjar
中寻找你的框架,我会在com.mycompany.awesomeinhouseframework
组目录下寻找awesome-inhouse-framework-xyjar
。 我会根据你的惯例在那里find它。
两条简单的规则适用于我:
- groupId的reverse-domain-packages(因为这是非常独特的),所有与java包名称有关的约束
- 项目名称为artifactId(请记住它应该是jar-name友好的)
古怪是非常主观的,我只是build议遵循官方的build议:
指定groupId,artifactId和版本的约定
groupId
将在所有项目中唯一标识您的项目,所以我们需要强制执行一个命名模式。 它必须遵循软件包名称规则,这意味着必须至less作为您所控制的域名,并且您可以创build任意数量的子组。 查看有关软件包名称的更多信息 。例如。
org.apache.maven
,org.apache.commons
确定groupId粒度的一个好方法是使用项目结构。 也就是说,如果当前项目是一个多模块项目,它应该向父项的groupId附加一个新的标识符。
例如。
org.apache.maven
,org.apache.maven.plugins
,org.apache.maven.reporting
artifactId
是没有版本的jar名称。 如果你创build了它,那么你可以select任何你想要的名字,用小写字母和没有奇怪的符号。 如果它是第三方的jar,那么你必须把这个jar的名字作为它的发布。例如。
maven
,commons-math
version
如果你分发它,那么你可以select任何典型的版本与数字和点(1.0,1.1,1.0.1,…)。 不要使用date,因为它们通常与SNAPSHOT(夜间)版本相关联。 如果它是第三方的神器,无论它是什么,都必须使用他们的版本号,并且看起来很奇怪。例如。
1.3.1
考虑以下build设基本的第一个Maven应用程序:
groupId
- com.companyname.project
artifactId
- 项目
version
- 0.0.1
考虑这个获得一个完全独特的jar文件:
- GroupID – com.companyname.project
- ArtifactId – com-companyname-project
- 包 – com.companyname.project