pom.xml是什么?
pom.xml(项目对象模型-Project Object Model的缩写)是Maven项目的核心配置文件,用于管理项目的依赖、插件、构建配置等。
举例说明:以阿里巴巴的fastjson为例:
4.0.0
com.alibaba.fastjson2
fastjson2-parent
2.0.23
../pom.xml
com.alibaba
fastjson
fastjson1-compatible
Fastjson is a JSON processor (JSON parser + JSON generator) written in Java
jar
https://github.com/alibaba/fastjson2
2022
Apache 2
https://www.apache.org/licenses/LICENSE-2.0.txt
repo
A business-friendly OSS license
https://github.com/alibaba/fastjson2
scm:git:https://[email protected]/alibaba/fastjson2.git
Alibaba Group
https://github.com/alibaba
wenshao
wenshao
shaojin.wensj(at)alibaba-inc.com
Developer
Tech Leader
+8
https://github.com/wenshao
oldratlee
Jerry Lee
oldratlee(at)gmail.com
Developer
CI/SCM Engineer
+8
https://github.com/oldratlee
VictorZeng
Victor Zeng
Victor.Zxy(at)outlook.com
Developer
+8
https://github.com/VictorZeng
kraity
陆之岇
kat(at)krait.cn
Developer
+8
https://github.com/kraity
org.springframework
spring-framework-bom
pom
${springframework5.version}
import
org.springframework.data
spring-data-bom
pom
2021.2.5
import
org.springframework.security
spring-security-bom
pom
5.7.5
import
com.alibaba.fastjson2
fastjson2-extension
${project.version}
com.squareup.retrofit2
retrofit
provided
io.airlift
slice
provided
javax.servlet
javax.servlet-api
provided
javax.ws.rs
javax.ws.rs-api
2.1.1
provided
true
joda-time
joda-time
provided
org.glassfish.jersey.core
jersey-common
provided
org.javamoney.moneta
moneta-core
provided
org.json
json
provided
org.springframework
spring-messaging
provided
org.springframework
spring-webmvc
provided
org.springframework
spring-websocket
provided
org.springframework.data
spring-data-redis
provided
cglib
cglib-nodep
test
com.aliyun.odps
odps-sdk-udf
test
com.chinamobile.cmos
sms-core
test
com.fasterxml.jackson.core
jackson-databind
test
com.fasterxml.jackson.jaxrs
jackson-jaxrs-json-provider
test
com.fasterxml.jackson.module
jackson-module-afterburner
test
com.fasterxml.jackson.module
jackson-module-kotlin
test
com.google.code.gson
gson
test
com.google.protobuf
protobuf-java
test
com.google.protobuf
protobuf-java-util
test
com.googlecode.json-simple
json-simple
test
com.jayway.jsonpath
json-path
test
com.jsoniter
jsoniter
test
commons-io
commons-io
test
io.springfox
springfox-spring-web
test
net.minidev
json-smart
test
net.sf.json-lib
json-lib
jdk15
test
org.apache.commons
commons-collections4
test
org.apache.commons
commons-lang3
test
org.clojure
clojure
1.11.1
test
org.codehaus.groovy
groovy
3.0.13
test
org.eclipse.jetty
jetty-server
test
org.eclipse.jetty
jetty-webapp
test
org.gitlab4j
gitlab4j-api
test
org.glassfish.jersey.containers
jersey-container-servlet
test
org.glassfish.jersey.core
jersey-client
test
org.glassfish.jersey.media
jersey-media-json-jackson
test
org.glassfish.jersey.test-framework.providers
jersey-test-framework-provider-jdk-http
test
org.hibernate
hibernate-core
test
org.javassist
javassist
test
org.springframework
spring-test
test
org.springframework.security
spring-security-web
test
maven-surefire-plugin
com/alibaba/fastjson/**/*.java
com/alibaba/fastjson/**/*.kt
Asia/Shanghai
1.modules
modules 标签用于声明当前 Maven 项目包含的模块子项目,每个子项目都是一个独立的 Maven 项目,具有自己的 pom.xml 文件,可以进行独立构建和测试。在父项目的 pom.xml 文件中,使用 标签来列出所有子项目的名称,如下所示:
com.example.parent
parent-project
1.0.0
pom
child1
child2
child3
上述代码表示当前项目是一个 Maven 的多模块项目:它包含了三个子项目 child1、child2 和 child3,这三个子项目与 parent-project 有相同的 groupId 和 version,但是 artifactId 不同,它们的 pom.xml 都位于 parent-project 的根目录下。当使用 Maven 命令在 parent-project 下执行构建时,Maven 会对每个子模块执行构建,最终生成子项目的构件并复制到 parent-project 的 target 目录下
2.parent
parent 标签用于声明当前 Maven 项目的父项目,它可以将若干个 Maven 项目组织成一个整体,指定版本号,插件版本号等,便于管理和维护,在一个 Maven 项目中,使用标签来引用父项目,如下所示:
com.example.child
child-project
1.0.0
jar
com.example.parent
parent-project
1.0.0
../parent-project/pom.xml
上述代码表示当前项目 child-project 是 parent-project 的子项目,它的 groupId 和 version 都继承自 parent-project。元素是一个可选项,它的值是父项目 pom.xml 文件到子项目 pom.xml 文件的相对路径,如果子项目 pom.xml 和父项目 pom.xml 在同一目录下,则可以省略此元素。
3.properties
properties 严格来说,并不一定是项目本身的信息,而是人为设置的属性或者说宏,这个标签用来定义和管理项目中所需要的属性,其作用有以下几个:
统一管理项目中的常用属性,比如版本号、路径、插件版本等,方便统一修改和管理。
可以在配置过程中使用 ${…}占位符引用这些属性,使得配置更加灵活和便捷。
避免硬编码,提高代码的可维护性和可读性
demo-project
1.0.0
1.8
....省略其余部分
com.example.demo
${project.name}-api
${project.version}
四、项目的依赖列表
1.dependency
与项目的依赖列表相关的标签最外层由
其中的
compile:依赖库默认的 scope,表示该依赖库在编译、测试、运行时均需要使用。
provided:表示该依赖库只在编译和测试时需要使用,而在运行时已经被系统或者容器提供,所以不需要打包到最终的应用程序中。
runtime:表示该依赖库只在运行时需要使用,而在编译和测试时则不需要。
test:表示该依赖库只在测试时需要使用,而在编译和运行时则不需要。
比如说我们引入了 junit 包,但显然这个包我们不需要在打包时包含,只是用于测试,那么我们就可以将 junit 的 scope 设置为 test。
2.repository
当然,我们还能在pom文件中支持指定Maven仓库,即使用
有一个好的文章,供大家参考:
全面详解Maven的配置文件pom.xml(含常用plugin)_maven配置pom.xml-CSDN博客