【发布时间】:2012-03-15 04:20:54
【问题描述】:
我有一个关于具有分层目录结构的多模块项目中的 Maven 命名约定(groupId、artifactId 和目录名称)的问题。
研究
在问之前,我浏览了其他关于这个主题的网络以及我为自己清除的内容:
Possible duplication for my question, but it does not cover multiple-hierarchy levels.
-
Guide to Naming Conventions 举个例子:
groupId 将在所有项目中唯一标识您的项目,因此我们需要强制实施命名架构。它必须遵循包名规则(例如 org.apache.maven、org.apache.commons、org.apache.maven.plugins)
artifactId 如果您创建了它,那么您可以选择任何您想要的名称,使用小写字母且没有奇怪的符号。 (例如 maven、commons-math)
这很简单,我理解它,但仍有一些不清楚的地方。
约定中提到的artifactId 示例只能应用于一级层次结构模块。
示例
我浏览了 maven 存储库并提取了一些示例:
Spring 主要使用名称:spring-core、spring-context、spring-context-support。所有独立模块都是一级层次结构和 spring- 前缀以提高搜索效率。没有问题,因为层次结构没有那么深。
Apache CXF 命名对于 Apache 来说是非常规的。工件是独立的模块,名称中最多有 5 个可能的不同工件,例如。 cxf-tools-wsdlto-databinding-jaxb。
有很多工件(cxf-rt-databinding-jaxb、cxf-rt-databinding-aegis、cxf-rt-databinding-xmlbeans、cxf-rt-databinding-sdo)可以分组到多个模块项目中( cxf-rt-databindings),但他们没有,所以名字变成了意大利面条。
最后,Maven Plugins 首先是一个多模块项目(在 org.apache.maven 之后),其中包含以下工件:maven-compiler-plugin、maven-enforcer-plugin。
有很多示例,并且都遵循不同的约定关于命名 artifactIds(因此是项目目录)。
结果
从示例中获取最佳实践让我们回顾层级。
一层层级命名将是 (
groupId: org.organization.project
artifactId: project-portal ---.
|
project-portal-service
|
project-portal-plugins (continued on next diagram)
|
project-portal-util
(续)两级层次结构是:
groupId: org.organization.project.plugins
artifactId: project-portal-plugins ---.
|
project-sample-plugin
|
project-another-great-plugin
|
???? (multiple module project)
你看到问号了吗?这就是
问题
我遵循示例中的约定(忽略意大利面条 Apache CXF 示例):
- 根 - 项目门户(例如 spring-core、maven-core)
- 一级层次结构名称从根继承 - project-portal-plugins(例如 spring-context-support)。
- 二级层次结构名称 - project-sample-plugin(例如 maven-compiler-plugin)。
现在我们被困在第三级,就像在没有保存和检查点的旧游戏中一样。
- 这是从 Maven 示例中获取的用于更深层次结构级别的正确目录命名路径吗?
- 您是否遵循任何约定或规则来支持简单的目录和工件名称,避免在更深层次上使用意大利面条名称?
- 如果存在简单名称,groupId 是否会在存储库中保存重复的工件名称(由于简单性会发生这种情况)?
- 如何在网络/存储库中搜索和查找名称重复的工件(因为简单)?
我不想在我的项目结构中看到像 project-portal-liferay-plugins-themes 之类的模块用于父级或更糟糕的 project-portal-liferay-plugins-themes-white-puppy-wtf-name 用于孩子.
如果您可以针对任何提到的问题和可能的问题提供您的意见和实践,那不仅对我有很大帮助,而且对使用 maven 的每个人也有很大帮助。谢谢。
【问题讨论】:
标签: maven naming-conventions hierarchy directory-structure multi-module