Maven Artifacts的命名约定

Man*_*noj 20 maven-2 naming-conventions

我们目前正在努力对公司现有的项目进行整理.我们已经执行了POC,目前正在记录我们的学习和指导.我为maven工件提出了以下命名约定.请分享您的意见

注意:在我们公司,projectname始终是唯一的

对于单级多模块maven项目

家长(pom)

  • groupId:org.companyname.projectname
  • artifactId:org.companyname.projectname
  • 版本:xxx

例如:org.companyname.projectname:org.companyname.projectname-1.0.0.pom

模块(罐子)

  • groupId:org.companyname.projectname
  • artifactId:org.companyname.projectname.modulename
  • 版本:xxx

例如:org.companyname.projectname:org.companyname.projectname.modulename-1.0.0.jar

对于多级多模块maven项目

家长(pom)

  • groupId:org.companyname.projectname
  • artifactId:org.companyname.projectname
  • 版本:xxx

例如:org.companyname.projectname:org.companyname.projectname-1.0.0.pom

SubParent(pom)

  • groupId:org.companyname.projectname
  • artifactId:org.companyname.projectname.subcategory
  • 版本:xxx

例如:org.companyname.projectname:org.companyname.projectname.subcategory-1.0.0.pom

模块(罐子)

  • groupId:org.companyname.projectname
  • artifactId:org.companyname.projectname.subcategory.modulename
  • 版本:xxx

例如:org.companyname.projectname:org.companyname.projectname.subcategory.modulename-1.0.0.jar

Pét*_*rök 18

您不需要org.companyname在artifactId中包含IMO - 它只是复制了groupId中已存在的信息,从而使工件名称更长且可读性更低.

更新:仅供参考,通过查看项目的依赖关系,我看到了很多类似的例子,例如

<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>

<groupId>org.codehaus.mojo</groupId>
<artifactId>jboss-maven-plugin</artifactId>

<groupId>net.sf.barcode4j</groupId>
<artifactId>barcode4j-fop-ext-0.20.5-complete</artifactId>

<groupId>org.springframework</groupId>
<artifactId>spring</artifactId>

<groupId>opensymphony</groupId>
<artifactId>oscache</artifactId>

<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-libs</artifactId>

<groupId>javax.resource</groupId>
<artifactId>connector-api</artifactId>

<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>

<groupId>javax.transaction</groupId>
<artifactId>jta</artifactId>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
Run Code Online (Sandbox Code Playgroud)

然后有许多组和工件ID是相同的非限定名称,例如:

<groupId>log4j</groupId>
<artifactId>log4j</artifactId>

<groupId>velocity</groupId>
<artifactId>velocity</artifactId>

<groupId>fop</groupId>
<artifactId>fop</artifactId>

<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
Run Code Online (Sandbox Code Playgroud)

但是我没有看到任何具有完全限定的组ID和相同的工件ID(例如对于Log4J而言org.apache.log4j:org.apache.log4j).

  • 命名约定的官方maven指南同意Peter :-) http://maven.apache.org/guides/mini/guide-naming-conventions.html (3认同)

Pas*_*ent 17

对于与artifactId匹配的groupId使用非限定名称(例如)是一种旧的弃用做法,不推荐使用:它在文件系统级别很糟糕,它会生成"存储库混乱",这会使浏览存储库时难以找到工件(甚至如果大多数人现在使用搜索引擎).log4j

建议是在groupId中包含你的域名,我肯定不会在artifactId中重复它(据我所知,Spring不是这样做的 - 除了可能是OSGI工件?).

这是我使用的:

家长(pom)

  • groupId:org.companyname.projectname
  • artifactId:root
  • 版本:xxx

例如:org.companyname.projectname:root-1.0.0.pom

SubParent(pom)

  • groupId:org.companyname.projectname
  • artifactId:subcategory-parent
  • 版本:xxx

例如:org.companyname.projectname:subcategory-parent-1.0.0.pom

模块(罐子)

  • groupId:org.companyname.projectname
  • artifactId:modulename
  • 版本:xxx

例如:org.companyname.projectname:modulename-1.0.0.jar

我还使用<description>元素约定在反应堆构建期间获得清晰的概述.以下是宠物项目的示例:

$ mvn compile
[INFO] Scanning for projects...
[INFO] Reactor build order: 
[INFO]   Personal Sandbox - Samples - Parent POM
[INFO]   Personal Sandbox - Samples - EJB3 and Cargo Sample
[INFO]   Personal Sandbox - Tools - Parent POM
[INFO]   Personal Sandbox - Tools - Shared Verification Resources
[INFO]   Personal Sandbox - Samples - EJB3 and Cargo Sample - Services
[INFO]   Personal Sandbox - Samples - EJB3 and Cargo Sample - Functests
[INFO]   Sandbox Externals POM

这很大程度上受到了Vincent Massol组织大型构建的方式的启发,就像他对XWiki或Cargo一样.