pom.xml配置文件详解
几个重点:
1.profile
在实际的项目开发中,通常会有很多配置环境,比如最基本的:开发、测试、生产;不同的环境,某些文件的配置是不一样的(如:数据库连接信息、properties文件的配置等),如果我们进行开发或者测试时每次都得手动去修改配置文件,难免有些麻烦且容易出现问题所以,maven的profile功能就出现了。
简单说一下,maven的profile可以让我们定义一系列的配置信息,然后指定其激活条件。这样我们就可以定义多个profile,然后每个profile对应不同的激活条件和配置信息,从而达到不同环境使用不同配置信息的目的。
构建不同的环境配置主要有两种效果(或者叫实现方式):
第一种,根据不同的环境生成不同的配置文件(profile+resources);
第二种,根据不同的环境生成不同的配置内容,并替换原配置文件中的内容(profile+resources+filters);
参考:
https://blog.youkuaiyun.com/qq_16313365/article/details/79387561
https://jingyan.baidu.com/article/0bc808fc3e20971bd485b9e4.html
https://blog.youkuaiyun.com/weixin_30307921/article/details/95730613?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_baidulandingword-0&spm=1001.2101.3001.4242
profile例子:
https://www.cnblogs.com/davenkin/p/advanced-maven-use-profile.html
2. Build
Maven是通过pom.xml来执行任务的,其中的build标签描述了如何来编译及打包项目,而具体的编译和打包工作是通过build中配置的 plugin 来完成。当然plugin配置不是必须的,默认情况下,Maven 会绑定以下几个插件来完成基本操作。
在没有配置的情况下,执行maven clean install时,maven会调用默认的plugin来完成编译打包操作,具体会执行以下plugin:
如果有需要可以针对各个plugin进行特殊的配置,需要在pom.xml文件中的标签中显示指定plugin和对应的属性配置。
在Maven的pom.xml文件中,Build相关的配置包含两个部分:一种被称为Project Build,即是的直接子元素。另一种被称为Profile Build,即是的直接子元素。
2.1 基本元素(共有的)
defaultGoal:执行构建(即编译或打包吧)时默认的goal或phase,如jar:jar或者package。
directory:构建的结果所在的路径,默认为
b
a
s
e
d
i
r
/
t
a
r
g
e
t
目
录
。
f
i
n
a
l
N
a
m
e
:
打
包
文
件
名
。
f
i
l
t
e
r
s
:
定
义
∗
.
p
r
o
p
e
r
t
i
e
s
文
件
,
包
含
一
个
p
r
o
p
e
r
t
i
e
s
列
表
,
该
列
表
会
应
用
的
支
持
f
i
l
t
e
r
的
r
e
s
o
u
r
c
e
s
中
。
也
就
是
说
,
定
义
在
f
i
l
t
e
r
的
文
件
中
的
"
n
a
m
e
=
v
a
l
u
e
"
值
对
会
在
b
u
i
l
d
时
代
替
{basedir}/target目录。 finalName:打包文件名。 filters:定义*.properties文件,包含一个properties列表,该列表会应用的支持filter的resources中。也就是说,定义在filter的文件中的"name=value"值对会在build时代替
basedir/target目录。finalName:打包文件名。filters:定义∗.properties文件,包含一个properties列表,该列表会应用的支持filter的resources中。也就是说,定义在filter的文件中的"name=value"值对会在build时代替{name}值应用到resources中。Maven的默认filter文件夹是${basedir}/src/main/filters/。
2.2 resources(共有的)
resources(资源)往往不是代码,而是properties或xml文件,无需编译,构建过程中往往会将资源文件从源路径复制到指定的目标路径,resources则给出各个资源在maven项目中的具体路径。
2.3 plugins(共有的)
plugins(插件)设置构建过程中需要的插件。
强烈建议参考:https://blog.youkuaiyun.com/tomato__/article/details/13625497
https://maven.apache.org/plugins/index.html
https://www.runoob.com/maven/maven-plugins.html
2.4 pluginManagement(共有的)
pluginManagement的元素的配置和plugins的配置是一样的,只是这里的配置只是用于集成,在孩子POM中指定使用。例如,在父POM中做如下配置:
则在孩子POM中,我们只需要配置:
2.5 reporisity
Reporting包含的属性对应到site阶段(见Maven生命周期)。特定的Maven插件能产生定义和配置在reporting元素下的报告,例如:产生Javadoc报告。
在这里插入图片描述
对于reportSets:
2.6 <…Directory>(Project Build特有的)
往往配置在父项目中,供所有父子项目使用.使用如下:
目录可以使用绝对路径,如果使用相对路径,则所有的相对路径都是在${basedir}目录下.
参考:https://blog.youkuaiyun.com/xiaoyao2246/article/details/88355463
https://blog.youkuaiyun.com/jiachunchun/article/details/90235498
https://blog.youkuaiyun.com/tomato__/article/details/13625497
pom.xml小结
Maven pom.xml的功能很多,使用灵活多变,要想完全掌握其使用方法,既不现实,也没必要。重点应掌握以下几方面:
搭建项目:主要用到的标签有modules、parent。
管理依赖:主要用到的标签有dependencies、dependencyManagement->dependency、exclusions、exclusion。
打包项目:主要用到的标签有packaging。
构件配置:主要用到的标签有classifier。
运行环境:主要环境有开发、测试、生产。主要用到的标签有profiles->profile->
activation、build等。
构建项目:使用maven构建的项目均可以直接使用maven build完成项目的编译测试打包,无需额外的配置。maven是通过pom.xml来执行任务的。其中的build标签描述了如何来编译打包项目,而具体的编译和打包工作是通过build中配置的plugin来完成的。主要用到的标签有build->finalName、directory、defaultGoal、filters、resources、testResources、sourceDirectory、scriptSourceDirectory、testSourceDirectory、outputDirectory、testOutputDirectory、extension、plugins、pluginManagement等。
资源配置:build的另一个特征是指定你的项目中resources的位置。resources(通常)不是代码,他们不被编译,但是被绑定在你的项目或者用于其它什么原因,例如代码生成。主要用到的标签有resources、testResources等。
插件配置:主要用到的标签有plugins、pluginManagement等。
分发配置:项目分发信息,在执行mvn deploy后表示要发布的位置。 有了这些信息就可以把网站部署到远程服务器或者把构件部署到远程仓库。主要用到的标签主要有distributionManagement->repository、snapshotRepository、site、downloadUrl、relocation等。
仓库配置:即Maven仓库。主要用到的标签主要有repositories、pluginRepositories等。
报表配置:描述使用报表插件产生报表的规范,特定的maven 插件能输出相应的定制和配置报表。 当用户执行“mvn site”,这些报表就会运行,在页面导航栏能看到所有报表的链接。主要用到的标签主要有Reporting、excludeDefaults、outputDirectory、plugins等。
项目环境:项目的问题管理系统(Bugzilla, Jira, Scarab,或任何你喜欢的问题管理系统)的名称和URL、项目持续集成信息。主要用到的标签主要有issueManagement、ciManagement等。
项目信息:用于Maven产生的文档用,包括项目的名称、URL、详细描述、项目构建环境中的前提条件、创建年份、相关邮件列表信息、项目开发者列表、项目的其他贡献者列表、项目所有License列表、代码库、项目所属组织等。主要用到的标签主要有Name、url、description、prerequisites、inceptionYear 、mailingLists、developers、contributors、licenses、scm、organization等。
参考:
https://www.runoob.com/maven/maven-pom.html
https://blog.youkuaiyun.com/qq_33363618/article/details/79438044