Maven artifactID命名约定的最佳实践(有限制吗?)

Maven artifactID命名约定的最佳实践(有限制吗?),maven,naming-conventions,nexus,artifactory,archiva,Maven,Naming Conventions,Nexus,Artifactory,Archiva,我的团队是Maven的新手,我们还没有找到任何关于为我们的项目选择工件的明确指导 我知道政府说人工制品应该 “您想要的任何名称,带有小写字母,没有奇怪的符号” 但是我组中的一些人希望对groupid和artifactId使用反向域名样式 基于上述指导原则以及我在中央存储库中看到的所有示例,我认为使用反向域样式的工件是没有意义的,但我无法判断这样做是否实际上是无效的,或者仅仅是不赞成的。我模模糊糊地记得读过一些关于各种存储库管理器无法有效处理包含句点(.)字符的工件的文章,但我不记得在哪里读到过&

我的团队是Maven的新手,我们还没有找到任何关于为我们的项目选择工件的明确指导

我知道政府说人工制品应该

“您想要的任何名称,带有小写字母,没有奇怪的符号”

但是我组中的一些人希望对groupidartifactId使用反向域名样式

基于上述指导原则以及我在中央存储库中看到的所有示例,我认为使用反向域样式的工件是没有意义的,但我无法判断这样做是否实际上是无效的,或者仅仅是不赞成的。我模模糊糊地记得读过一些关于各种存储库管理器无法有效处理包含句点(.)字符的工件的文章,但我不记得在哪里读到过&我现在找不到了


Maven artifactID中允许的字符有哪些规则(如果有的话)?

我认为groupId类似于Java中的包名,其中artifactID类似于类名(不是很确定),但我认为与类名有关系。在Maven中,通常为模块/项目指定一个名称,尤其是artifactId


此外,我还发现了一些关于artifactId的提示。

这里有一些关于这个主题的帖子:

指针
和堆栈溢出

那么,我建议您不要在artifactId中使用groupId。这是多余的;)

我引用了与您的问题最相关的sonatype文档:

类型命名约定 groupId将在所有项目中唯一地标识您的项目,因此我们需要强制实施命名模式。它必须遵循一揽子计划 名称规则,这意味着你必须至少拥有一个域名 控件,并且可以创建任意多的子组。如。 org.apache.maven,org.apache.commons 确定groupId粒度的一个好方法是使用项目结构。也就是说,如果当前项目是多个 模块项目,它应该在父项的 groupId。 例如org.apache.maven、org.apache.maven.plugins、org.apache.maven.reporting

artifactId是没有版本的jar的名称。如果您创建了它,那么您可以用小写字母选择您想要的任何名称 没有奇怪的符号。如果是第三方的罐子,你必须带上 分发的jar的名称。例如。maven,公共数学

版本如果分发,则可以选择带有数字和点的任何典型版本(1.0、1.1、1.0.1等)。不要使用日期 因为它们通常与快照(夜间)构建相关联。如果是 作为第三方工件,您必须使用其版本号 是的,尽管看起来很奇怪。2.0,2.0.1,1.3.1


因此,在groupId和包名中使用反向dns是一个很好的做法。在artifactId中再次使用它们是不正确的。

注释而不是答案,但例如Eclipse工件在名称中使用句点——我从未遇到过这一问题,至少几年没有遇到过。请看。这家伙提供正则表达式。这是一个非常好的问题!我试着自己回答。。。但是太晚了(啤酒时间胡说:D)。我将在接下来的几天内尝试(我正在度假,所以可能会很困难)。没有关系。。。如果没有直截了当的回答,我会悬赏的!这真是个好问题!谢谢大家的回复。我认为gontard实际上有最好的答案,但因为它是作为一个注释留下的,所以我无法选择它。现在有一个棘手的部分:jar的最上面的包应该对应于groupId还是groupId.CLEANUP(artifactId),例如给定groupId:org.foo,artifactId:bar-maven-plugin=>package org.foo.bar-mavenplugin.OSGi项目中使用artifactId中的groupId似乎是一种最佳实践。(示例:,)OSGi捆绑包是什么?在SpringEnterpriseBundle存储库中,所有捆绑包都显示在artifactId中,这是因为OSGi联盟的Eclipse端似乎决意违反他们没有创建的所有约定,没有明显的好处。在artifactId中包含groupId是多余的。它在OSGi中的使用似乎起源于bnd早期与maven集成的努力,当时集成的开发人员不理解或选择忽略已建立的maven命名约定。
commons math
不仅仅包含“小写字母”。列入名单似乎不完整。