• 史上最全maven配置文件解析说明,从官网找pom.xml标签挨个解释


    pom.xml 文件的第一层标签定义了 Maven 项目的基本元数据和构建配置。下面是这些标签的分析,这些标签提供了对 Maven 项目的详细描述和完全的构建配置。通常,不需要在每个项目中都使用这些标签,只有当需要的时候才定义相应的标签。

    maven官方的pom文件标签介绍信息

    pom.xml文件中的二级标签列表

    1. 项目基本信息:
      • modelVersiongroupIdartifactIdversionpackaging
      • namedescriptionurlinceptionYearorganizationlicenses
    2. 项目关系定义:
      • parentmodules
    3. 项目人员和通信:
      • developerscontributorsmailingLists
    4. 项目环境和管理:
      • prerequisitesscmissueManagementciManagementdistributionManagement
    5. 项目依赖和插件管理:
      • dependencyManagementdependenciesrepositoriespluginRepositories
    6. 构建相关:
      • buildreportsreporting
    7. 其他:
      • propertiesprofiles

    1. 项目基本信息:

      • modelVersion: 指定当前 POM 的模型版本,通常这个值都是 4.0.0

        
        <modelVersion>4.0.0modelVersion>
        
        • 1
        • 2
      • groupId: 定义项目属于哪个组。这通常是组织的唯一标识符,如公司的域名反转(如 com.example)。

      • artifactId: 定义项目的基本名称

      • version: 指定项目的版本。

        
        <version>6.4.1version>
        
        
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9
        • 10
        • 11
        • 12
        • 13
        • 14
      • packaging: 定义项目的打包方式,如 jarwar 等。

        
        <packaging>jarpackaging>
        
        <packaging>warpackaging>
        
        <packaging>earpackaging>
        
        <packaging>pompackaging>
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9
      • name: 项目的显示名称。

      • description: 项目的描述。

      • url: 项目的官方网址。

      • inceptionYear: 项目的开始年份。

        
        <inceptionYear>2020inceptionYear>
        
        • 1
        • 2
      • organization: 描述项目所属的组织信息。

    2. 项目关系定义:

      • parent: 指定项目的父项目。多模块项目或继承关系中常用。

        
        <parent>
            <groupId>com.examplegroupId>
            <artifactId>parent-projectartifactId>
            <version>1.0.0version>
            
            <relativePath>../pom.xmlrelativePath>
        parent>
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9
        • 10
        • 11
        • 12
        • 13
        • 14
        • 15
      • modules: 指定此项目包含的模块。通常用于多模块项目。

        
        <modules>
            <module>module1module>
            <module>module2module>
            <module>module3module>
        modules>
        
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9
        • 10
        • 11
    3. 项目人员和通信:

      项目人员信息和通信信息可以用到持续集成\持续部署中

      通常会使用持续集成/持续部署(CI/CD)工具(如 JenkinsGitLab CITravis CI 等)与相关的插件或脚本来实现自动发通知的功能。

      1. developers: 定义项目开发者的信息。

        <developers>
            <developer>
                
                <id>johndoeid>
                
                <name>John Doename>
                
                <email>johndoe@example.comemail>
                
                <url>http://www.example.com/johndoeurl>
                
                <organization>Example Inc.organization>
                
                <organizationUrl>http://www.example.comorganizationUrl>
                
                <roles>
                    <role>developerrole>
                    <role>architectrole>
                roles>
                
                <timezone>+8timezone>
                
                <properties>
                    <twitterHandle>@johndoetwitterHandle>
                    <githubUsername>johndoe123githubUsername>
                properties>
            developer>
            
        developers>
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9
        • 10
        • 11
        • 12
        • 13
        • 14
        • 15
        • 16
        • 17
        • 18
        • 19
        • 20
        • 21
        • 22
        • 23
        • 24
        • 25
        • 26
        • 27
        • 28
        • 29
        • 30
      2. contributors: 列出为项目做出贡献但不是主要开发者的人。

        <contributors>
            <contributor>
        	
            contributor>
            
        contributors>
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
      3. mailingLists: 关于项目的邮件列表。

        <mailingLists>
            
            <mailingList>
                
                <name>Project Usersname>
                
                <subscribe>users-subscribe@example.comsubscribe>
                
                <unsubscribe>users-unsubscribe@example.comunsubscribe>
                
                <post>users@example.compost>
                
                
                <archive>http://www.example.com/mailing-lists/usersarchive>
            mailingList>
        mailingLists>
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9
        • 10
        • 11
        • 12
        • 13
        • 14
        • 15
        • 16
    4. 项目环境和管理:

      • prerequisites: 指定构建此项目所需的 Maven 版本和 JDK 版本。

        
        
        <prerequisites>
            <maven>3.1.0maven>
        prerequisites>
        
        • 1
        • 2
        • 3
        • 4
        • 5
      • scm(Source Control Management): 指定项目的源码管理信息,如 Git。

        
        <scm>
            
            <connection>scm:git:git://github.com/username/projectname.gitconnection>
              
            <developerConnection>scm:git:ssh://github.com/username/projectname.gitdeveloperConnection>
            
            <url>http://github.com/username/projectnameurl>
            
            <tag>HEADtag>
        scm>
        
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9
        • 10
        • 11
        • 12
      • issueManagement: 定义项目的问题跟踪系统。

        
        <issueManagement>
            
            <system>GitHubsystem>
            
            <url>https://github.com/username/projectname/issuesurl>
        issueManagement>
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
      • ciManagement(Continuous Integration, CI): 定义项目的持续集成信息。

        
        <ciManagement>
            
            <system>Jenkinssystem>
            
            <url>https://jenkins.example.com/job/projectname/url>
            
            <notifiers>
                <notifier>
                    
                    <type>mailtype>
                    
                    <sendOnError>sendOnError>
                    
                    <configuration>
                        <address>dev-team@example.comaddress>
                    configuration>
                notifier>
            notifiers>
        ciManagement>
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9
        • 10
        • 11
        • 12
        • 13
        • 14
        • 15
        • 16
        • 17
        • 18
        • 19
        • 20
        • 21
        • 22
      • distributionManagement: 控制项目的发布,包括部署站点和仓库。

        
        <distributionManagement>
            
            <repository>
                
                <id>release-repoid>
                
                <name>Releasesname>
                
                <url>https://repo.example.com/releasesurl>
            repository>
            
            <snapshotRepository>
                <id>snapshot-repoid>
                <name>Snapshotsname>
                <url>https://repo.example.com/snapshotsurl>
            snapshotRepository>
            
            <site>
                
                <id>project-siteid>
                
                <name>Project Websitename>
                
                <url>ftp://example.com/public_html/project-siteurl>
            site>
        distributionManagement>
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9
        • 10
        • 11
        • 12
        • 13
        • 14
        • 15
        • 16
        • 17
        • 18
        • 19
        • 20
        • 21
        • 22
        • 23
        • 24
        • 25
        • 26
        • 27
    5. 项目依赖和插件管理:

      • dependencyManagement: 定义项目的依赖版本管理,常用于多模块项目统一管理版本。

        
        <dependencyManagement>
            <dependencies>
                <dependency>
                    
                    <groupId>com.samplegroupId>
                    <artifactId>sample-libraryartifactId>
                    <version>1.0.0version>
                    <scope>testscope>
                    
                    <exclusions>
                        <exclusion>
                            <groupId>org.unwantedgroupId>
                            <artifactId>unwanted-libraryartifactId>
                        exclusion>
                    exclusions>
                dependency>
            dependencies>
        dependencyManagement>
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9
        • 10
        • 11
        • 12
        • 13
        • 14
        • 15
        • 16
        • 17
        • 18
        • 19
        • 20
        • 21
        • 22
        • 23
        • 24
      • dependencies: 列出项目的所有依赖。

        
        <dependencies>
            <dependency>
                <groupId>org.springframeworkgroupId>
                <artifactId>spring-coreartifactId>
                <version>5.3.10version>
            dependency>
            <dependency>
                <groupId>junitgroupId>
                <artifactId>junitartifactId>
                <version>4.13.1version>
                <scope>testscope>
                
                    <exclusions>
                        <exclusion>
                            <groupId>org.unwantedgroupId>
                            <artifactId>unwanted-libraryartifactId>
                        exclusion>
                    exclusions>
            dependency>
        dependencies>
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9
        • 10
        • 11
        • 12
        • 13
        • 14
        • 15
        • 16
        • 17
        • 18
        • 19
        • 20
        • 21

        下面是 scope 的主要取值及其含义:
        compile(默认值): 依赖在所有的类路径中都可用,也会被包含在发布的构建产物中。如果你没有指定 scope,那么默认就是 compile
        provided: 这表示你期望 JDK 或一个容器提供这个依赖。例如,当开发一个 servletTomcat 或其他的 servlet 容器会提供 servlet-api.jar。此依赖在运行时不需要 Maven 提供。
        runtime: 该依赖在运行时和测试系统的执行环境中是必须的,但在编译时不是必需的。一个例子是JDBC驱动。
        test: 该依赖仅用于测试,不用于正常的编译或运行。
        system: 该依赖必须从文件系统中明确提供,而不是从仓库中。这与 provided 类似,但需要通过 systemPath 指定 JAR 文件的路径。这种作法并不推荐,因为它与文件系统的具体布局有关,可能导致构建的非可移植性。

      • repositories: 定义项目需要访问的远程仓库。

        
        <repositories>
            <repository>
                
                <id>my-internal-siteid>
                
                <url>http://repo.mycompany.com/maven2url>
            repository>
        repositories>
        
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9
        • 10
        • 11
        • 12
        • 13
        • 14
        • 15
        • 16
        • 17
        • 18
        • 19
      • pluginRepositories: 定义插件需要访问的远程仓库。

        
        <pluginRepositories>
            <pluginRepository>
                
                <id>my-internal-siteid>
                
                <url>http://repo.mycompany.com/maven2url>
            pluginRepository>
        pluginRepositories>
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9
    6. 构建相关:

      • build: 定义项目的构建配置,如插件、资源等。

        <build>
            
            <sourceDirectory/>
            
            <scriptSourceDirectory/>
            
            <testSourceDirectory/>
            
            <outputDirectory/>
            
            <testOutputDirectory/>
            
            <resources>
                <resource>
                    <directory>src/main/resourcesdirectory>
                    
                    <filtering>truefiltering>
                resource>
            resources>
            
            <testResources>testResources>
            
            <pluginManagement>
                <plugins>
                    ……
                plugins>
            pluginManagement>
            
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.pluginsgroupId>
                    <artifactId>maven-compiler-pluginartifactId>
                    <version>3.8.1version>
                    
                    <dependencies>
                        <dependency>
                            <groupId>org.codehaus.plexusgroupId>
                            <artifactId>plexus-compiler-javacartifactId>
                            <version>2.8.7version>
                        dependency>
                    dependencies>
                    
                    <configuration>
                        <source>1.8source>
                        <target>1.8target>
                    configuration>
                plugin>
            plugins>
        build>
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9
        • 10
        • 11
        • 12
        • 13
        • 14
        • 15
        • 16
        • 17
        • 18
        • 19
        • 20
        • 21
        • 22
        • 23
        • 24
        • 25
        • 26
        • 27
        • 28
        • 29
        • 30
        • 31
        • 32
        • 33
        • 34
        • 35
        • 36
        • 37
        • 38
        • 39
        • 40
        • 41
        • 42
        • 43
        • 44
        • 45
        • 46
        • 47
        • 48
        • 49

        extensionsplugins 都是 Maven 用来扩展其核心功能的机制,但它们之间存在一些关键差异:

        plugins:Maven 插件主要用于在 Maven 构建生命周期中的特定阶段执行任务。只影响特定的生命周期阶段

        extensions:构建扩展用于扩展 Maven 的核心功能。可能影响整个构建过程

      • reports: 已经不再推荐使用,之前是用于 Maven 1.x

      • reporting: 定义项目的报告插件配置。

        
        <reporting>
            
            <outputDirectory>${project.build.directory}/my-reportsoutputDirectory>
            
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.pluginsgroupId>
                    <artifactId>maven-javadoc-pluginartifactId>
                    <version>3.3.0version>
                plugin>
            plugins>
        reporting>
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9
        • 10
        • 11
        • 12
        • 13
    7. 其他:

      • properties: 定义项目中使用的属性,可以在其他地方引用。

        
        <properties>
            
            <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
            
            <junit.version>5.7.0junit.version>
        properties>
        
        <dependencies>
            <dependency>
                <groupId>junitgroupId>
                <artifactId>junit-jupiterartifactId>
                <version>${junit.version}version>
            dependency>
        dependencies>
        
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.pluginsgroupId>
                    <artifactId>maven-compiler-pluginartifactId>
                    <configuration>
                        <source>1.8source>
                        <target>1.8target>
                        <encoding>${project.build.sourceEncoding}encoding>
                    configuration>
                plugin>
            plugins>
        build>
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9
        • 10
        • 11
        • 12
        • 13
        • 14
        • 15
        • 16
        • 17
        • 18
        • 19
        • 20
        • 21
        • 22
        • 23
        • 24
        • 25
        • 26
        • 27
        • 28
        • 29
      • profiles: 定义构建配置的特定情境或情况,如不同的环境。

        
        <profiles>
            <profile>
                <id>developmentid>
                <activation>
                    <activeByDefault>trueactiveByDefault> 
                activation>
                <properties>
                    <env>devenv>
                properties>
                <dependencies>
                    
                dependencies>
            profile>
        profiles>
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9
        • 10
        • 11
        • 12
        • 13
        • 14
        • 15
  • 相关阅读:
    深入理解浏览器渲染原理
    C语言文件的相关操作
    Zookeeper集群 + Kafka集群
    【App自动化测试】(九)移动端复杂测试环境模拟——来电、短信、网络切换
    从Django模型创建复合索引
    经济型EtherCAT运动控制器(八):轴参数与运动指令
    “蔚来杯“2022牛客暑期多校训练营4 M题: Monotone Chain
    MT8665 Android 5.1 I2C驱动,非DMA方式,无法读写超过8个字节的问题的修改
    【Go ~ 0到1 】 第二天 6月25 Switch语句,数组的声明与遍历
    【problem】解决idea提示Method breakpoints may dramatically slow down debugging
  • 原文地址:https://blog.csdn.net/u013795102/article/details/133750086