我们目前正在努力对公司现有项目进行整合。我们已经执行了POC,目前正在记录我们的学习和指导。我为maven工件提出了以下命名约定。请在同一个
上分享您的意见注意:在我们公司,projectname始终是唯一的
例如:org.companyname.projectname:org.companyname.projectname-1.0.0.pom
例如:org.companyname.projectname:org.companyname.projectname.modulename-1.0.0.jar
例如:org.companyname.projectname:org.companyname.projectname-1.0.0.pom
例如:org.companyname.projectname:org.companyname.projectname.subcategory-1.0.0.pom
例如:org.companyname.projectname:org.companyname.projectname.subcategory.modulename-1.0.0.jar
答案 0 :(得分:18)
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
)。
答案 1 :(得分:17)
使用与 artifactId 匹配的 groupId 的非限定名称(例如log4j
)是old deprecated practice which is not recommended:它在文件系统级别不好,它会生成“存储库混乱”,它会在浏览存储库时更难找到工件(即使大多数人现在使用搜索引擎)。
建议将您的域名包含在 groupId 中,我肯定不会在 artifactId 中重复(据我所知,Spring is NOT doing that - 除外也许对于OSGI工件?)。
以下是我使用的内容:
例如:org.companyname.projectname:root-1.0.0.pom
例如:org.companyname.projectname:subcategory-parent-1.0.0.pom
例如: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
这很大程度上受到了文森特·马索尔组织大型建筑的方式的启发,就像他对XWiki或货物一样。