Maven 项目目录管理
最近在尝试用 Maven 写项目,但奈何功夫不到家,刚开始就被 Maven 项目的目录安排给难住了。

先介绍一下情况,我的项目(project)将会分为若干模块(module)。
大概是下面这样的情况:
- project
- module 1
- module 2
- module 3
而我仔细一想,这个问题其实可以分成几个小问题:
- 如何命名项目的 groupId 和 artifactId。
- 子 Maven 项目和父 Maven 项目之间的关系。
话不多说,切入正题。
如何命名项目的 groupId 和 artifactId
首先,我们需要知道的是这里的 groupId 和 artifactId 其实代表的是项目的坐标。
举个例子,
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
这两行实际上就可以帮助我们定位这个项目,它将会在 org/apache/maven/plugins/maven-compiler-plugin/ 这个文件夹下。
那其实我们的问题就迎刃而解了,假如说,在 aiinirii.xyz 这个域名下我想要建一个名为 proj 的项目。

这里要注意的,Location 其实和 GroupId 并无关系,其实只是源代码的存储路径,在 Maven 项目 Install 之后其实会直接被载入本地的 Maven 仓库中的 xyz/aiinirii/proj 目录下,只需要保证不会与其他坐标产生冲突就可以。
子 Maven 项目和父 Maven 项目之间的关系
讲清楚了如何命名项目,接下来再介绍一下如果像我一样,多项目之间有父子依赖关系怎么办?
首先,我们需要建一个父项目,例如设置 groupId 和 artifactId 分别为:
<groupId>xyz.aiinirii</groupId>
<artifactId>learn</artifactId>
这个父项目将会有若干个子项目,这里我新建一个名为 spring 的项目当例子:
<parent>
<artifactId>learn</artifactId>
<groupId>xyz.aiinirii</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>xyz.aiinirii.learn</groupId>
<artifactId>spring</artifactId>
建完该子项目之后,需要将父项目的 pom.xml 文件改成:
<groupId>xyz.aiinirii</groupId>
<artifactId>learn</artifactId>
<version>1.0-SNAPSHOT</version>
<modules>
<module>spring</module>
</modules>
可以看到,两者的关联已经产生了。在 Maven 软件部署之后,新建的这个名为 spring 的项目将会根据它的 groupId 成为父项目 learn 目录下的一个子项目。
两者之间的关系是,父项目中引入的包,子项目中不需要再次调配,我们可以发现,这种方式可以保证同一父项目下的各个子项目的环境的统一,同时还便于管理。
总结
- 项目打包之后的路径(groupId)使用域名反写的方式。
- artifactId 及项目名称,最终会被安置在 groupId 路径下。
- 使用多模块开发的方式,可以统一管理 Maven 项目环境。