Maven工件和groupId命名

时间:2010-09-16 07:07:40

标签: maven-2 naming-conventions

我目前正在将一些项目从Ant迁移到Maven。像我一样顺从,我想使用完善的惯例来寻找groupIdartifactId,但我找不到任何详细的约定(有一些,但它们没有涵盖我的观点我想知道。

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

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

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

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

你会怎么做?

另一个例子:

包名:com.mycompany.awesomeinhouseframework

groupIdcom.mycompany.awesomeinhouseframework(?)

artifactIdawesome-inhouse-framework(?)

5 个答案:

答案 0 :(得分:214)

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

  

Guide to naming conventions on groupId, artifactId and version

     
      
  • groupId 将在所有项目中唯一标识您的项目,   所以我们需要强制执行命名架构。   它必须遵循包名称   规则,必须具备的意义   至少作为您控制的域名,   并且您可以创建任意数量的子组   如你所愿。 Look at More information about package names

         

    例如。 org.apache.mavenorg.apache.commons

         

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

         

    例如。 org.apache.mavenorg.apache.maven.plugins,   org.apache.maven.reporting

  •   
  • artifactId 是没有版本的jar的名称。如果你创建了它   然后你可以选择你的名字   希望用小写字母而不是   奇怪的符号。如果是第三方   jar你必须取名字   罐子,因为它是分布式的。

         

    例如。 mavencommons-math

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

         

    例如。 2.02.0.11.3.1

  •   

答案 1 :(得分:112)

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

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

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

答案 2 :(得分:80)

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

groupId

  • com.companyname.project

artifactId

  • 项目

version

  • 0.0.1

答案 3 :(得分:0)

但是,我不同意Guide to naming conventions on groupId, artifactId, and version的官方定义,该定义建议groupId必须以您控制的反向域名开头。

com表示该项目属于公司,而org表示该项目属于社会组织。这些都不错,但是对于诸如xxx.tv,xxx.uk,xxx.cn之类的陌生域,以“ tv。”,“ cn。”开头的groupId命名是没有意义的,groupId应该提供基本信息项目而不是领域。

答案 4 :(得分:-9)

考虑这个来获得一个完全独特的jar文件:

  • GroupID - com.companyname.project
  • ArtifactId - com-companyname-project
  • 包 - com.companyname.project