我目前正在将一些项目从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
(?)
答案 0 :(得分:214)
古怪是非常主观的,我只是建议遵循官方建议:
Guide to naming conventions on groupId, artifactId and version
groupId
将在所有项目中唯一标识您的项目, 所以我们需要强制执行命名架构。 它必须遵循包名称 规则,必须具备的意义 至少作为您控制的域名, 并且您可以创建任意数量的子组 如你所愿。 Look at More information about package names例如。
org.apache.maven
,org.apache.commons
确定groupId粒度的好方法是使用 项目结构。也就是说,如果 当前项目是一个多模块 项目,它应该附加一个新的 父对象groupId的标识符。
例如。
org.apache.maven
,org.apache.maven.plugins
,org.apache.maven.reporting
artifactId
是没有版本的jar的名称。如果你创建了它 然后你可以选择你的名字 希望用小写字母而不是 奇怪的符号。如果是第三方 jar你必须取名字 罐子,因为它是分布式的。例如。
maven
,commons-math
version
如果您分发它,那么您可以选择任何典型的 带数字和点的版本(1.0, 1.1,1.0.1,......)。不要使用通常与之相关的日期 SNAPSHOT(每晚)建立。如果是的话 第三方神器,你必须使用 他们的版本号是什么, 并且看起来很奇怪。例如。
2.0
,2.0.1
,1.3.1
答案 1 :(得分:112)
你的约定似乎是合理的。如果我在Maven仓库中搜索您的框架,我会在awesome-inhouse-framework-x.y.jar
组目录中查找com.mycompany.awesomeinhouseframework
。我会根据你的惯例在那里找到它。
两个简单的规则对我有用:
答案 2 :(得分:80)
请考虑以下建立基本的第一个 Maven 应用程序:
groupId
artifactId
version
答案 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文件: