Maven pom.xml配置详解

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
与项目的依赖列表相关的标签最外层由 来囊括,内部包含了各种具体的依赖,该标签用于指定一个依赖项,它包含以下几个子标签

:指定依赖项的groupId,项目的组名

:指定依赖项的artifactId,项目的唯一标识符

:指定依赖项的版本号。

:指定依赖项在项目中的使用范围。

其中的 一般包含以下几种范围:常用的有compile、test、provided 和 runtime

compile:依赖库默认的 scope,表示该依赖库在编译、测试、运行时均需要使用。

provided:表示该依赖库只在编译和测试时需要使用,而在运行时已经被系统或者容器提供,所以不需要打包到最终的应用程序中。

runtime:表示该依赖库只在运行时需要使用,而在编译和测试时则不需要。

test:表示该依赖库只在测试时需要使用,而在编译和运行时则不需要。

比如说我们引入了 junit 包,但显然这个包我们不需要在打包时包含,只是用于测试,那么我们就可以将 junit 的 scope 设置为 test。

2.repository
当然,我们还能在pom文件中支持指定Maven仓库,即使用 标签,用于指定一个Maven仓库,它包含以下几个子标签:

:指定Maven仓库的ID。

:指定Maven仓库的名称。

:指定Maven仓库的URL

                      

有一个好的文章,供大家参考:

全面详解Maven的配置文件pom.xml(含常用plugin)_maven配置pom.xml-CSDN博客

你可能感兴趣的:(maven,xml)