Maven POM配置 译文
POM原文: https://maven.apache.org/guid...
构建项目
开发Java的过程中可能会使用很多依赖包,来自第三方的或者由自己搭建的Maven仓库。依赖包之间的版本兼容管理是开发中一个棘手的问题。Maven将所有依赖有关的信息记录在pom.xml文件上,然后自动地下载和构建这些依赖包。
什么是POM
POM全称Project Object Model(项目对象模型),是Maven的基本单元。这个XML文件包含了所有关于项目配置的信息,这些信息将用于Maven构建项目。它包含了一些默认值,target文件夹是build目录,src/main/java文件夹是源代码目录,src/test/java是测试目录。运行Maven时,Maven会首先寻找POM所在的文件夹,然后获取其中的配置信息,最后执行它将要做的任务。
Super POM
POM文件之间可以有依赖关系,一个POM文件可以使用它继承的POM文件的配置信息。所有的POM文件都隐式地继承于super-POM,super-POM的内容可见:https://maven.apache.org/ref/...
Minimal POM (最小POM)
一个最小的有效POM文件需要包含以下的配置信息
project
:配置信息的根
modelVersion
:设置为4.0.0
groupId
:项目的组id
artifactId
:项目的id
version
:项目的版本
以下是一个示例
4.0.0
com.mycompany.app
my-app
1
【Maven POM配置 译文】组id,id和版本组成一个项目完整的合法名称,例如组id为
com.xich.app
,项目id为super-teacher
,版本号为1.0.0.RELEASE
。那么一个合法的完整的项目名称为com.xich.app:super-teacher:1.0.0.RELEASE
。上面的最小POM配置没有告知Maven要执行什么目标(goal),那么Maven就会执行默认的目标(记住,这些默认的配置来自POM文件继承的super-POM)。默认目标就是将目前这个项目打包为一个
jar
包。最小POM配置也没有说明Maven仓库的地址,super-POM中声明了仓库为
https://repo.maven.apache.org/maven2
,那么它就会从这个仓库中下载所需的包。项目继承
POM中可被合并的元素包括:
dependencies
:依赖developers and contributors
:开发者和贡献者plugin lists
:插件列表plugin executions with matching ids
:带有id的插件执行plugin configuration
:插件配置resources
:资源你可以使用
parent
元素声明继承。例子 以最小POM中的POM为例子,即
com.mycompany.app:my-app:1
,我们引入另一个项目:com.mycompany.app:module-alpha:1
项目的目录结构:
.
|--module-alpha
|--pom.xml
--pom.xml
可以看到
module-alpha.pom.xml
是com.mycompany.app:module-alpha:1
的POM配置。现在,我们想让
com.mycompany.app:my-app:1
作为父项目,那么module-alpha
的pom.xml
应该为4.0.0
com.mycompany.app
my-app
1
../pom.xml
com.mycompany.app
module-alpha
1
其中
relativePath
指定了POM的所在位置项目整合 (Project Aggregation)
项目整合类似项目继承,但它不是指定模块的POM作为父级POM,而是指定父级POM中的模块进行整合。这样,父级项目就知道它的模块有哪些,如果一个Maven指令在父项目中执行,那么Maven指令同样会执行在父项目的模块中。
具体用法:
- 将父级POM打包进
pom
- 在父级POM中指定其子模块的目录
位于
.\pom.xml
的com.mycompany.app:my-app:1
4.0.0
com.mycompany.app
my-app
1
位于
.\module-alpha\pom.xml
的com.mycompany.app:module-alpha:1
4.0.0
com.mycompany.app
module-alpha
1
要把
module-alpha
整合进my-app
中,就要修改my-app
的POM配置为:4.0.0
com.mycompany.app
my-app
1 pom
module-alpha
上面的POM没有声明
module-alpha
的路径,是因为一般情况下,模块的POM在父级POM的下一级目录,且目录名称一般为模块名称。如果模块的路径不符合上述规范,那么module
元素中应该标明模块的路径,例如:
../my-module
变量
POM有预定义变量和自定义变量。例如版本号元素
version
是project
元素上的子元素,那么可以通过以下方式复用这个变量。${project.version}
变量是在继承后处理的。因此,如果在POM中定义了某个父级POM中已有的变量,那么父级POM中的变量就会被覆盖掉。
特殊变量
project.basedir
:当前项目的目录project.baseUri
:当前项目的url目录maven.build.timestamp
:项目构建的时间戳时间戳的格式可以用以下方式进行自定义:
...yyyy-MM-dd'T'HH:mm:ss'Z'
...
自定义时间戳格式的语法可见:https://docs.oracle.com/javas...
自定义变量可以使用
properties
元素,示例:...3.0
org.apache.maven
maven-artifact
${mavenVersion}
org.apache.maven
maven-core
${mavenVersion}
...
以上例子中在
properties
定义了mavenVersion
,在dependencies
中引入两个都使用了这个变量作为版本号,调用变量的语法为${变量名}
。推荐阅读
- vue-cli|vue-cli 3.x vue.config.js 配置
- 从战略性的角度可以配置股票
- 缓存有关的配置和属性
- Spring|Spring Boot 自动配置的原理、核心注解以及利用自动配置实现了自定义 Starter 组件
- Vagrant|Vagrant (三) - 网络配置
- java|java b2b2c shop 多用户商城系统源码- config 修改配置
- CentOS7 阿里云镜像配置方法
- maven使用tomcat7插件编译jsp出错
- Python|Win10下 Python开发环境搭建(PyCharm + Anaconda) && 环境变量配置 && 常用工具安装配置
- 为Google|为Google Cloud配置深度学习环境(CUDA、cuDNN、Tensorflow2、VScode远程ssh等)