【问题标题】:Naming convention for Maven ArtifactsMaven 工件的命名约定
【发布时间】:2011-03-10 03:57:03
【问题描述】:

我们目前正在尝试对我们公司的现有项目进行 mavenize。我们已经执行了 POC,目前正在记录我们的学习和指导方针。我为 Maven 工件提出了以下命名约定。请在同一位置分享您的 cmets

注意:在我们公司,项目名称始终是唯一的

对于单级多模块maven项目

父(pom)

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

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

模块(罐子)

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

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

对于多级多模块 maven 项目

父(pom)

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

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

子父(pom)

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

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

模块(罐子)

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

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

【问题讨论】:

    标签: maven-2 naming-conventions


    【解决方案1】:

    IMO 您不需要在 artifactId 中包含 org.companyname - 它只是复制 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>
    

    然后有很多组和工件 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>
    

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

    【讨论】:

    • 谢谢彼得。这确实是有道理的,但我正在查看来自 spring 和 maven 存储库的工件。他们都遵循类似的命名约定,所以我也决定跟随人群;-)
    • @Manoj,我显然看到了一个非常不同的 ID 样本 - 查看我的更新(当然,你自己决定四个 :-)
    • 官方 maven 命名约定指南与 Peter 一致 :-) maven.apache.org/guides/mini/guide-naming-conventions.html
    【解决方案2】:

    使用与 artifactId 匹配的 groupId 的非限定名称(例如 log4j)是 old deprecated practice which is not recommended:这在文件系统级别很糟糕,它会生成“存储库混乱”,它使浏览存储库时更难找到工件(即使现在大多数人都使用搜索引擎)。

    建议将您的域名包含在 groupId 中,我当然不会在 artifactId 中重复它(据我所知,Spring is NOT doing that - 除了可能OSGI 工件?)。

    这是我使用的:

    父(pom)

    • groupId : org.companyname.projectname
    • artifactId:根
    • 版本:x.x.x

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

    子父(pom)

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

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

    模块(罐子)

    • groupId : org.companyname.projectname
    • artifactId:模块名称
    • 版本:x.x.x

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

    我还使用&lt;description&gt; 元素的约定,以便在反应堆构建期间获得清晰的概览。这是一个宠物项目的例子:

    $ mvn 编译 [INFO] 正在扫描项目... [INFO] 反应堆建造顺序: [INFO] 个人沙盒 - 示例 - 父 POM [INFO] 个人沙箱 - 示例 - EJB3 和 Cargo 示例 [INFO] 个人沙盒 - 工具 - 父 POM [INFO] 个人沙盒 - 工具 - 共享验证资源 [INFO] 个人沙箱 - 示例 - EJB3 和 Cargo 示例 - 服务 [INFO] 个人沙箱 - 示例 - EJB3 和 Cargo 示例 - 功能测试 [INFO] 沙盒外部 POM

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

    【讨论】:

    • 每个子模块都改groupId也不错吧?
    • 应该是 &lt;name&gt; 而不是 &lt;description&gt; 来生成 Reactor 构建顺序的输出。
    猜你喜欢
    • 2014-06-04
    • 2021-12-26
    • 1970-01-01
    • 2011-08-08
    • 2012-03-15
    • 2016-08-23
    • 2021-12-27
    • 2010-11-14
    • 1970-01-01
    相关资源
    最近更新 更多