Maven工件和groupId命名

Noa*_*rth 269 maven-2 naming-conventions

我目前正在将一些项目从Ant迁移到Maven.循规蹈矩,因为我,我想用行之有效的约定查找groupIdartifactId,但我找不到任何详细的约定(也有一些,但不包括我想了解一下点).

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

Tea计时器实际上是两个单词,但Java包命名约定禁止插入下划线或连字符,所以我将它们全部写在一起.

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

最后,我必须选择一个artifactId,我目前去了teatimer.但是当我查看其他Maven项目时,他们使用连字符来分割artifactIds中的单词,如下所示:tea-timer.但是当连接到groupId:时确实看起来很奇怪com.mycompany.teatimer.tea-timer.

你会怎么做?

另一个例子:

包裹名字: com.mycompany.awesomeinhouseframework

groupId:( com.mycompany.awesomeinhouseframework?)

artifactId:( awesome-inhouse-framework?)

Pas*_*ent 230

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

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

  • 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

  • version如果你分发它,那么你可以选择任何带有数字和点的典型版本(1.0,1.1,1.0.1,...).不要使用日期,因为它们通常与SNAPSHOT(夜间)构建相关联.如果它是第三方神器,你必须使用他们的版本号,不管它是什么,并且它看起来很奇怪.

    例如.2.0,2.0.1,1.3.1

  • 怎么样'包`?groupId有什么区别? (9认同)
  • 我知道这些约定,但他们并没有真正说出应该如何组成工件名称(没有JAR命名约定)以及如果它与groupId相同怎么办 - 我没有看到单个POM情况就是这样. (2认同)

Hen*_*sek 131

你的惯例似乎是合理的.如果我在Maven仓库中搜索您的框架,我会awesome-inhouse-framework-x.y.jarcom.mycompany.awesomeinhouseframework组目录中查找.我会根据你的惯例在那里找到它.

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

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

  • 请澄清“jar-name 友好”是什么意思? (3认同)

Man*_*wal 96

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

groupId

  • com.companyname.project

artifactId

  • 项目

version

  • 0.0.1

  • groupId 应该是 com.companyname 而不是 com.companyname.project (5认同)
  • 并不是真正的设计方式,Apache 鼓励在 groupId 中添加项目/模块名称:https://maven.apache.org/guides/mini/guide-naming-conventions.html (2认同)