史上最全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>
      
    • groupId: 定义项目属于哪个组。这通常是组织的唯一标识符,如公司的域名反转(如 com.example)。

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

    • version: 指定项目的版本。

      
      <version>6.4.1version>
      
      
      
    • packaging: 定义项目的打包方式,如 jarwar 等。

      
      <packaging>jarpackaging>
      
      <packaging>warpackaging>
      
      <packaging>earpackaging>
      
      <packaging>pompackaging>
      
    • name: 项目的显示名称。

    • description: 项目的描述。

    • url: 项目的官方网址。

    • inceptionYear: 项目的开始年份。

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

  2. 项目关系定义:

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

      
      <parent>
          <groupId>com.examplegroupId>
          <artifactId>parent-projectartifactId>
          <version>1.0.0version>
          
          <relativePath>../pom.xmlrelativePath>
      parent>
      
    • modules: 指定此项目包含的模块。通常用于多模块项目。

      
      <modules>
          <module>module1module>
          <module>module2module>
          <module>module3module>
      modules>
      
      
  3. 项目人员和通信:

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

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

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

      <developers>
          <developer>
              
              <id>johndoeid>
              
              <name>John Doename>
              
              <email>[email protected]email>
              
              <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>
      
    2. contributors: 列出为项目做出贡献但不是主要开发者的人。

      <contributors>
          <contributor>
      	
          contributor>
          
      contributors>
      
    3. mailingLists: 关于项目的邮件列表。

      <mailingLists>
          
          <mailingList>
              
              <name>Project Usersname>
              
              <subscribe>[email protected]subscribe>
              
              <unsubscribe>[email protected]unsubscribe>
              
              <post>[email protected]post>
              
              
              <archive>http://www.example.com/mailing-lists/usersarchive>
          mailingList>
      mailingLists>
      
  4. 项目环境和管理:

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

      
      
      <prerequisites>
          <maven>3.1.0maven>
      prerequisites>
      
    • 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>
      
      
    • issueManagement: 定义项目的问题跟踪系统。

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

      
      <ciManagement>
          
          <system>Jenkinssystem>
          
          <url>https://jenkins.example.com/job/projectname/url>
          
          <notifiers>
              <notifier>
                  
                  <type>mailtype>
                  
                  <sendOnError>sendOnError>
                  
                  <configuration>
                      <address>[email protected]address>
                  configuration>
              notifier>
          notifiers>
      ciManagement>
      
    • 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>
      
  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>
      
    • 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>
      

      下面是 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>
      
      
    • pluginRepositories: 定义插件需要访问的远程仓库。

      
      <pluginRepositories>
          <pluginRepository>
              
              <id>my-internal-siteid>
              
              <url>http://repo.mycompany.com/maven2url>
          pluginRepository>
      pluginRepositories>
      
  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>
      

      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>
      
  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>
      
    • profiles: 定义构建配置的特定情境或情况,如不同的环境。

      
      <profiles>
          <profile>
              <id>developmentid>
              <activation>
                  <activeByDefault>trueactiveByDefault> 
              activation>
              <properties>
                  <env>devenv>
              properties>
              <dependencies>
                  
              dependencies>
          profile>
      profiles>
      

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