Maven神器和groupId命名

我目前正在将一些项目从Ant移植到Maven。 就我而言,我想用完善的约定来寻找groupIdartifactId ,但是我找不到任何详细的约定(有一些,但是他们没有涵盖我想知道的要点)。

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

茶定时器实际上是两个字,但Java包命名约定禁止插入下划线或连字符,所以我一起写。

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

最后,我必须select一个artifactId ,我现在去teatimer 。 但是当我查看其他Maven项目时,他们使用连字符来分割artifactId的单词,例如: tea-timer 。 但是,当连接到groupIdcom.mycompany.teatimer.tea-timer时,它看起来很奇怪。

你会怎么做?

另一个例子:

包名称: com.mycompany.awesomeinhouseframework

groupIdcom.mycompany.awesomeinhouseframework (?)

artifactIdawesome-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.mavenorg.apache.commons

    确定groupId粒度的一个好方法是使用项目结构。 也就是说,如果当前项目是一个多模块项目,它应该向父项的groupId附加一个新的标识符。

    例如。 org.apache.mavenorg.apache.maven.pluginsorg.apache.maven.reporting

  • artifactId是没有版本的jar名称。 如果你创build了它,那么你可以select任何你想要的名字,用小写字母和没有奇怪的符号。 如果它是第三方的jar,那么你必须把这个jar的名字作为它的发布。

    例如。 mavencommons-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