Maven pom.xml文件深度学习

    本文介绍Maven项目构建中,pom.xml文件的生成规则和常用节点的使用方法。pom.xml官方网址:http://maven.apache.org/pom.html

pom简介

    pom作为项目对象模型。通过xml表示maven项目,使用pom.xml来实现。主要描述了项目:包括配置文件;开发者需要遵循的规则,缺陷管理系统,组织和licenses,项目的url,项目的依赖性,以及其他所有的项目相关因素。

    pom.xml文件是Maven进行工作的主要配置文件。在这个文件中我们可以配置Maven项目的groupIdartifactIdversionMaven项目必须的元素;可以配置Maven项目需要使用的远程仓库;可以定义Maven项目打包的形式;可以定义Maven项目的资源依赖关系等等。对于一个最简单的pom.xml的定义必须包含modelVersiongroupIdartifactIdversion这四个元素,当然这其中的元素也是可以从它的父项目中继承的。在Maven中,使用groupIdartifactIdversion组成groupdId:artifactId:version的形式来唯一确定一个项目。

  • groupId:项目或者组织的唯一标志,并且配置时生成路径也是由此生成,如org.myproject.mojo生成的相对路径为:/org/myproject/mojo
  • artifactId:项目的通用名称
  • version:项目的版本
  • packaging:打包机制,如pom,jar,maven-plugin,ejb,war,ear,rar,par
  • POM关系:主要为依赖,继承,聚合。项目聚合要求父级设置packaging为pom模式。

    pom包括了所有的项目信息,常用节点解释如下:

<project xmlns="http://maven.apache.org/POM/4.0.0"   
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/maven-v4_0_0.xsd">   
      
    <parent>  
       
     <artifactId/>  
       
     <groupId/>  
       
     <version/>  
       
     <relativePath/>  
 parent>  
      
    <modelVersion>4.0.0modelVersion>   
       
    <groupId>asia.banseongroupId>   
       
    <artifactId>banseon-maven2artifactId>   
       
    <packaging>jarpackaging>   
       
    <version>1.0-SNAPSHOTversion>   
       
    <name>banseon-mavenname>   
       
    <url>http://www.baidu.com/banseonurl>   
       
    <description>A maven project to study maven.description>   
      
 <prerequisites>  
    
    <maven/>  
 prerequisites>  
    
    <issueManagement>  
        
        <system>jirasystem>   
          
        <url>http://jira.baidu.com/banseonurl>   
    issueManagement>   
      
 <ciManagement>  
    
  <system/>  
    
  <url/>  
    
  <notifiers>  
     
   <notifier>  
      
    <type/>  
      
    <sendOnError/>  
      
    <sendOnFailure/>  
      
    <sendOnSuccess/>  
      
    <sendOnWarning/>  
      
    <address/>  
      
    <configuration/>  
   notifier>  
  notifiers>  
 ciManagement>  
   
    <inceptionYear/>  
       
    <mailingLists>  
        
        <mailingList>   
           
            <name>Demoname>   
               
            <post>[email protected]post>   
               
            <subscribe>[email protected]subscribe>   
               
            <unsubscribe>[email protected]unsubscribe>   
              
            <archive>http:/hi.baidu.com/banseon/demo/dev/archive>   
        mailingList>   
    mailingLists>   
       
    <developers>   
       
        <developer>   
           
            <id>HELLO WORLDid>   
              
            <name>banseonname>   
              
            <email>[email protected]email>   
              
            <url/>  
              
            <roles>   
                <role>Project Managerrole>   
                <role>Architectrole>   
            roles>  
              
            <organization>demoorganization>   
              
            <organizationUrl>http://hi.baidu.com/banseonorganizationUrl>   
              
            <properties>   
                <dept>Nodept>   
            properties>  
              
            <timezone>-5timezone>   
        developer>   
    developers>   
       
    <contributors>  
       
     <contributor>  
   <name/><email/><url/><organization/><organizationUrl/><roles/><timezone/><properties/>  
     contributor>       
    contributors>     
       
    <licenses>  
        
        <license>  
           
            <name>Apache 2name>   
              
            <url>http://www.baidu.com/banseon/LICENSE-2.0.txturl>   
              
            <distribution>repodistribution>   
              
            <comments>A business-friendly OSS licensecomments>   
        license>   
    licenses>   
       
    <scm>   
           
        <connection>   
            scm:svn:http://svn.baidu.com/banseon/maven/banseon/banseon-maven2-trunk(dao-trunk)    
        connection>   
          
        <developerConnection>   
            scm:svn:http://svn.baidu.com/banseon/maven/banseon/dao-trunk    
        developerConnection>  
          
        <tag/>         
           
        <url>http://svn.baidu.com/banseonurl>   
    scm>   
       
    <organization>   
       
        <name>demoname>   
          
        <url>http://www.baidu.com/banseonurl>   
    organization>  
      
    <build>  
       
  <sourceDirectory/>  
    
  <scriptSourceDirectory/>  
    
  <testSourceDirectory/>  
    
  <outputDirectory/>  
    
  <testOutputDirectory/>  
    
  <extensions>  
     
   <extension>  
      
    <groupId/>  
      
    <artifactId/>  
      
    <version/>  
   extension>  
  extensions>  
    
  <defaultGoal/>  
    
  <resources>  
     
   <resource>  
      
    <targetPath/>  
      
    <filtering/>  
      
    <directory/>  
      
    <includes/>  
      
    <excludes/>  
   resource>  
  resources>  
    
  <testResources>  
     
   <testResource>  
    <targetPath/><filtering/><directory/><includes/><excludes/>  
   testResource>  
  testResources>  
    
  <directory/>  
    
  <finalName/>  
    
  <filters/>  
    
  <pluginManagement>  
     
   <plugins>  
      
    <plugin>  
       
     <groupId/>  
       
     <artifactId/>  
       
     <version/>  
       
     <extensions/>  
       
     <executions>  
        
      <execution>  
         
       <id/>  
         
       <phase/>  
         
       <goals/>  
         
       <inherited/>  
         
       <configuration/>  
      execution>  
     executions>  
       
     <dependencies>  
        
      <dependency>  
       ......  
      dependency>  
     dependencies>       
       
     <inherited/>  
       
     <configuration/>  
    plugin>  
   plugins>  
  pluginManagement>  
    
  <plugins>  
     
   <plugin>  
    <groupId/><artifactId/><version/><extensions/>  
    <executions>  
     <execution>  
      <id/><phase/><goals/><inherited/><configuration/>  
     execution>  
    executions>  
    <dependencies>  
       
     <dependency>  
      ......  
     dependency>  
    dependencies>  
    <goals/><inherited/><configuration/>  
   plugin>  
  plugins>  
 build>  
   
 <profiles>  
    
  <profile>  
     
   <id/>  
     
   <activation>  
      
    <activeByDefault/>  
      
    <jdk/>  
      
    <os>  
       
     <name>Windows XPname>  
       
     <family>Windowsfamily>  
       
     <arch>x86arch>  
       
     <version>5.1.2600version>  
    os>  
      
    <property>  
       
     <name>mavenVersionname>  
       
     <value>2.0.3value>  
    property>  
      
    <file>  
       
     <exists>/usr/local/hudson/hudson-home/jobs/maven-guide-zh-to-production/workspace/exists>  
       
     <missing>/usr/local/hudson/hudson-home/jobs/maven-guide-zh-to-production/workspace/missing>  
    file>  
   activation>  
     
   <build>  
    <defaultGoal/>  
    <resources>  
     <resource>  
      <targetPath/><filtering/><directory/><includes/><excludes/>  
     resource>  
    resources>  
    <testResources>  
     <testResource>  
      <targetPath/><filtering/><directory/><includes/><excludes/>  
     testResource>  
    testResources>  
    <directory/><finalName/><filters/>  
    <pluginManagement>  
     <plugins>  
        
      <plugin>  
       <groupId/><artifactId/><version/><extensions/>  
       <executions>  
        <execution>  
         <id/><phase/><goals/><inherited/><configuration/>  
        execution>  
       executions>  
       <dependencies>  
          
        <dependency>  
         ......  
        dependency>  
       dependencies>  
       <goals/><inherited/><configuration/>  
      plugin>  
     plugins>  
    pluginManagement>  
    <plugins>  
       
     <plugin>  
      <groupId/><artifactId/><version/><extensions/>  
      <executions>  
       <execution>  
        <id/><phase/><goals/><inherited/><configuration/>  
       execution>  
      executions>  
      <dependencies>  
         
       <dependency>  
        ......  
       dependency>  
      dependencies>  
      <goals/><inherited/><configuration/>  
     plugin>  
    plugins>  
   build>  
     
   <modules/>  
     
   <repositories>  
      
    <repository>  
     <releases>  
      <enabled/><updatePolicy/><checksumPolicy/>  
     releases>  
     <snapshots>  
      <enabled/><updatePolicy/><checksumPolicy/>  
     snapshots>  
     <id/><name/><url/><layout/>  
    repository>  
   repositories>  
     
   <pluginRepositories>  
          
    <pluginRepository>  
     <releases>  
      <enabled/><updatePolicy/><checksumPolicy/>  
     releases>  
     <snapshots>  
      <enabled/><updatePolicy/><checksumPolicy/>  
     snapshots>  
     <id/><name/><url/><layout/>  
    pluginRepository>  
   pluginRepositories>  
     
   <dependencies>  
      
    <dependency>  
     ......  
    dependency>  
   dependencies>  
     
   <reports/>     
     
   <reporting>  
    ......  
   reporting>  
     
   <dependencyManagement>  
    <dependencies>  
       
     <dependency>  
      ......  
     dependency>  
    dependencies>  
   dependencyManagement>  
     
   <distributionManagement>  
    ......  
   distributionManagement>  
     
   <properties/>  
  profile>  
 profiles>  
   
 <modules/>  
       
    <repositories>   
       
        <repository>  
           
         <releases>  
            
    <enabled/>  
      
    <updatePolicy/>  
      
    <checksumPolicy/>  
   releases>  
     
   <snapshots>  
    <enabled/><updatePolicy/><checksumPolicy/>  
   snapshots>  
     
   <id>banseon-repository-proxyid>   
     
            <name>banseon-repository-proxyname>   
              
            <url>http://192.168.1.169:9999/repository/url>   
              
            <layout>defaultlayout>             
        repository>   
    repositories>  
      
    <pluginRepositories>  
       
  <pluginRepository>  
   ......  
  pluginRepository>  
 pluginRepositories>  
     
       
    <dependencies>   
        <dependency>  
     
            <groupId>org.apache.mavengroupId>   
              
            <artifactId>maven-artifactartifactId>   
              
            <version>3.8.1version>   
              
            <type>jartype>  
              
            <classifier>classifier>  
               
            <scope>testscope>     
              
            <systemPath>systemPath>   
              
            <exclusions>  
             <exclusion>   
                    <artifactId>spring-coreartifactId>   
                    <groupId>org.springframeworkgroupId>   
                exclusion>   
            exclusions>     
               
            <optional>trueoptional>  
        dependency>  
    dependencies>  
      
    <reports>reports>  
      
 <reporting>  
    
  <excludeDefaults/>  
    
  <outputDirectory/>  
    
  <plugins>  
     
   <plugin>  
      
    <groupId/>  
      
    <artifactId/>  
      
    <version/>  
      
    <inherited/>  
      
    <configuration/>  
      
    <reportSets>  
       
     <reportSet>  
        
      <id/>  
        
      <configuration/>  
        
      <inherited/>  
        
      <reports/>  
     reportSet>  
    reportSets>  
   plugin>  
  plugins>  
 reporting>  
   
 <dependencyManagement>  
  <dependencies>  
     
   <dependency>  
    ......  
   dependency>  
  dependencies>  
 dependencyManagement>     
       
    <distributionManagement>  
          
        <repository>  
           
   <uniqueVersion/>  
   <id>banseon-maven2id>   
   <name>banseon maven2name>   
            <url>file://${basedir}/target/deployurl>   
            <layout/>  
  repository>  
     
  <snapshotRepository>  
   <uniqueVersion/>  
   <id>banseon-maven2id>  
            <name>Banseon-maven2 Snapshot Repositoryname>  
            <url>scp://svn.baidu.com/banseon:/usr/local/maven-snapshoturl>   
   <layout/>  
  snapshotRepository>  
     
        <site>  
            
            <id>banseon-siteid>   
              
            <name>business api websitename>   
              
            <url>   
                scp://svn.baidu.com/banseon:/var/www/localhost/banseon-web    
            url>   
        site>  
    
  <downloadUrl/>  
    
  <relocation>  
     
   <groupId/>  
     
   <artifactId/>  
     
   <version/>  
     
   <message/>  
  relocation>  
    
  <status/>         
    distributionManagement>  
      
    <properties/>  
project>  
View Code

 pom常用节点使用方法

parent

<parent>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-parentartifactId>
<version>2.0.6.RELEASEversion>
<relativePath>../my-parentrelativePath> 
parent>

    relativePath是可选的,maven会首先搜索这个地址,在搜索本地远程repositories之前。parent节点主要是项目集成,项目聚合时使用。参考Spring Boot的pom文件,一般设置packaging为pom模式。构建一个父亲项目,可以不编写代码逻辑,只是管理多个项目之间公共的依赖。

dependencyManagement

    是用于帮助管理chidren的dependencies的,配置在parent项目中。例如如果parent使用dependencyManagement定义了一个dependencyon junit:junit4.0,那么 它的children就可以只引用 groupId和artifactId,而version就可以通过parent来设置,这样的好处就是可以集中管理依赖的版本。maven的依赖(dependencies)有传递性,为了解决兼容性问题,就用exclusions来排除造成兼容性问题的依赖。参考Spring boot的使用方式:

 <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.querydslgroupId>
                <artifactId>querydsl-mongodbartifactId>
                <version>${querydsl.version}version>
                <exclusions>
                    <exclusion>
                        <artifactId>mongo-java-driverartifactId>
                        <groupId>org.mongodbgroupId>
                    exclusion>
                exclusions>
            dependency>
            <dependency>
                <groupId>com.rabbitmqgroupId>
                <artifactId>amqp-clientartifactId>
                <version>${rabbit-amqp-client.version}version>
            dependency>
        dependencies>
    dependencyManagement>

 dependency

    dependency下面包含众多字标签。

  • type:默认为jar类型,常用的类型有:jar,ejb-client,test-jar...,可设置plugins中的extensions值为true后在增加新类型。
  • scope:用来指定当前包的依赖范围
  • compile(编译范围),是默认的范围,编译范围依赖在所有的classpath中可用,同时它们也会被打包。
  • provided(已提供范围),只有在当JDK或者一个容器已提供该依赖之后才使用。
  • runtime(运行时范围),在运行和测试系统的时候需要。
  • test(测试范围),在一般的 编译和运行时都不需要。
  • system(系统范围),与provided类似
  • optional:设置指依赖是否可选,默认为false,即子项目默认都继承,为true,则子项目必需显示的引入,与dependencyManagement里定义的依赖类似 。
  • exclusions:如果X需要A,A包含B依赖,那么X可以声明不要B依赖,只要在exclusions中声明exclusion。
  • exclusion:将B从依赖树中删除,如上配置,alibaba.apollo.webx不想使用com.alibaba.external ,但是alibaba.apollo.webx是集成了com.alibaba.external,r所以就需要排除掉。

   dependency是用于具体孩子项目的pom文件中,dependency的应用示例:

<dependencies>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starterartifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.bootgroupId>
                    <artifactId>spring-boot-starter-loggingartifactId>
                exclusion>
            exclusions>
        dependency>
dependencies>

 modules

    在聚合模式下,pom.xml 中下一部分列出了项目的子模块。这些模块在modules元素中定义,每个modules 元素对应了一个simple-parent/目录下的子目录。Maven知道去这些子目录寻找pom.xml 文件,并且,在构建的simp-parent 的时候,它会将这些子模块包含到要构建的项目中。

对于多模块的project,outer-module没有必需考虑inner-module的dependencies,当列出modules的时候,modules的顺序是不重要的,因为maven会自动根据依赖关系来拓扑排序,上级pom设置packaging为pom模式。modules例子如下 :

 <parent>
        <groupId>com.epet.microservicesgroupId>
        <artifactId>wl-topartifactId>
        <version>2.0.7version>
    parent>
    <artifactId>wl-parentartifactId>
    <version>1.0.0-SNAPSHOTversion>
    <packaging>pompackaging>
    <name>wl-parentname>
    <url>http://maven.apache.orgurl>
    <modules>
        <module>common-wlmodule>
        <module>api-wlmodule>
        <module>microservices-wlmodule>
    modules>

properties

    是为pom定义一些常量,在pom中的其它地方可以直接引用。参考Spring Boot中的定义和使用如下:

 <properties>
        <project.reporting.outputEncoding>UTF-8project.reporting.outputEncoding>
        <java.version>1.8java.version>
        <resource.delimiter>@resource.delimiter>
        <maven.compiler.source>${java.version}maven.compiler.source>
        <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
        <maven.compiler.target>${java.version}maven.compiler.target>
    properties>

    使用方式 如下 :${java.version}

resources

    resources描述工程中资源的位置,一般结合profiles标签,定义在不同的环境下使用不同的资源配置文件。Spring Boot中该标签的示例如下:

 <resources>
            <resource>
                <filtering>truefiltering>
                <directory>${basedir}/src/main/resourcesdirectory>
                <includes>
                    <include>**/application*.ymlinclude>
                    <include>**/application*.yamlinclude>
                    <include>**/application*.propertiesinclude>
                includes>
            resource>
            <resource>
                <directory>${basedir}/src/main/resourcesdirectory>
                <excludes>
                    <exclude>**/application*.ymlexclude>
                    <exclude>**/application*.yamlexclude>
                    <exclude>**/application*.propertiesexclude>
                excludes>
            resource>    
 

    结合profiles标签,可去掉相关的基本配置资源文件后,制定使用激活的配置文件。如:src/main/resources/${profiles.active}

子标签介绍:

  1. targetPath:指定build资源具体目录,默认是base directory。
  2. filtering:指定是否将filter文件的变量值在这个resource文件有效。即上面说的filters里定义的*.property文件。例如上面就指定那些变量值在configuration文件无效,设置为false。
  3. directory:指定属性文件的目录,build的过程需要找到它,并且将其放到targetPath下,默认的directory是${basedir}/src/main/resources
  4. testResources:包含测试资源元素。默认的测试资源路径是${basedir}/src/test/resources,测试资源是不部署的。
  5. include:指明需要包括的资源:${basedir}/src/main/resources目录下的,所有application.*文件都需要包括。
  6. exclude:指代不需要处理的资源,仅处理${basedir}/src/main/resources资源目录中除application.*之外的资源。

profiles

    在开发过程中,软件会面对不同的运行环境,比如开发环境、测试环境、生产环境,而软件在不同的环境中,有的配置可能会不一样,比如数据源配置、日志文件配置、以及一些软件运行过程中的基本配置,那每次将软件部署到不同的环境时,都需要修改相应的配置文件,这样来回修改,很容易出错,而且浪费劳动力。maven提供了一种方便的解决这种问题的方案,就是profile功能。profile可以定义一系列的配置信息,然后指定其激活条件。这样就可以定义多个profile,然后每个profile对应不同的激活条件和配置信息,从而达到不同环境使用不同配置信息的效果。针对于特定项目的profile配置可以定义在该项目的pom.xml中。使用举例如:

<profiles>
    <profile>
        
        <id>devid>
        <properties>
            <profiles.active>devprofiles.active>
        properties>
        <activation>
            
            <activeByDefault>trueactiveByDefault>
        activation>
    profile>
    <profile>
        
        <id>releaseid>
        <properties>
            <profiles.active>releaseprofiles.active>
        properties>
    profile>
    <profile>
        
        <id>betaid>
        <properties>
            <profiles.active>betaprofiles.active>
        properties>
    profile>
profiles> 

配置好profiles文件后,设置filtering为true,表示允许覆盖。在项目发布时,可通过Maven命令制定激活哪一个具体的配置文件,命令为:maven package -P dev-Dmaven.test.skip=true

<resource>
    <directory>src/main/resources/${profiles.active}directory>
    
    <filtering>truefiltering>
resource>

pluginManagement

    pluginManagement是表示插件声明,即你在项目中的pluginManagement下声明了插件,Maven不会加载该插件,pluginManagement声明可以被继承。pluginManagement节点必须放在bulid节点下面。一般是用来在父POM中定义,提供给子POM使用,子POM也可以覆盖这个定义,而且在父POM中定义了版本之后,子模块中直接应用。groupId和artifactId,而不用指定版本,同时也方便统一管理;而在父POM中的pluginManagement并不会介入到Maven的生命周期。pluginspluginManagement 的区别,类似 dependenciesdependencyManagement 的区别。plugins 下的 plugin 是真实使用的,而 pluginManagement 下的 plugins 下的 plugin 则仅仅是一种声明,子项目中可以对 pluginManagement 下的 plugin 进行信息的选择、继承、覆盖等。Spring Boot中pluginManagement的应用举例如下:

 <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.apache.johnzongroupId>
                    <artifactId>johnzon-maven-pluginartifactId>
                    <version>${johnzon.version}version>
                plugin>
                <plugin>
                    <groupId>org.jetbrains.kotlingroupId>
                    <artifactId>kotlin-maven-pluginartifactId>
                    <version>${kotlin.version}version>
                plugin>  
            plugins>
        pluginManagement>

plugins

    plugins就是直接引入一个plugin,而且可以绑定到Maven相关的生命周期上。该标签必须放在bulid标签中,使用举例如下:

<plugins>   
            <plugin>
                <artifactId>maven-source-pluginartifactId>
                <executions>
                    <execution>
                        <id>attach-sourcesid>
                        <phase>packagephase>
                        <goals>
                            <goal>jar-no-forkgoal>
                        goals>
                    execution>
                executions>
            plugin>
            
            <plugin>
                <groupId>org.codehaus.mojogroupId>
                <artifactId>versions-maven-pluginartifactId>
            plugin>
        plugins>

distributionManagement 

    的作用: 负责管理构件的发布。这是一个环境变量 。一般用于将本地的生成的包上传到远程私服上去。 中的标签:

  • 指定是否产生一个唯一性的version number还是使用address里的其中version部分.(true or false) 。其中标签id的值与本地Maven配置文件seting.xml中设置的远程私服的id一样。
  •  库的id
  • 库的名称
  • 库的url
  •  default或者legacy

     中的  && 各自的含义:maven仓库分为两种 release发布仓库() 和 snapshot快照仓库(),snapshot快照仓库用于保存开发过程中的不稳定版本,release正式仓库用来保存稳定的发行版本。定义一个组件/模块为快照版本只需要在pom文件中的该模板的版本号后面加上 -SNAPSHOT就可以了。 注意:必须是大写maven会根据模块的版本号(pom文件中的版本号)中是否带有-SNAPSHOT来判断这个是快照版本还是正式版本.。可通过maven命令:mvn clean deploy。

<distributionManagement>
    <repository>
      <uniqueVersion>falseuniqueVersion>
      <id>corp1id>
      <name>Corporate Repositoryname>
      <url>scp://repo/maven2url>
      <layout>defaultlayout>
    repository>
    <snapshotRepository>
      <uniqueVersion>trueuniqueVersion>
      <id>propSnapid>
      <name>Propellors Snapshotsname>
      <url>sftp://propellers.net/mavenurl>
      <layout>legacylayout>
    snapshotRepository>
  distributionManagement>

 mvn打包命令

  • mvn clean package依次执行了clean、resources、compile、testResources、testCompile、test、jar(打包)等7个阶段。
  • mvn clean install依次执行了clean、resources、compile、testResources、testCompile、test、jar(打包)、install等8个阶段。
  •  mvn clean deploy依次执行了clean、resources、compile、testResources、testCompile、test、jar(打包)、install、deploy等9个阶段。

    由上面的分析可知主要区别如下,

  • package命令完成了项目编译、单元测试、打包功能,但没有把打好的可执行jar包(war包或其它形式的包)布署到本地maven仓库和远程maven私服仓库。
  • install命令完成了项目编译、单元测试、打包功能,同时把打好的可执行jar包(war包或其它形式的包)布署到本地maven仓库,但没有布署到远程maven私服仓库。
  • deploy命令完成了项目编译、单元测试、打包功能,同时把打好的可执行jar包(war包或其它形式的包)布署到本地maven仓库和远程maven私服仓库。

build

  • defaultGoal :默认的目标,必须跟命令行上的参数相同,如:jar:jar,或者与时期parse相同,例如install。
  • directory:指定build target目标的目录,默认为$(basedir}/target,即项目根目录下的target。
  • finalName:指定去掉后缀的工程名字,例如:默认为${artifactId}-${version}。
  • filters:定义指定filter属性的位置,例如filter元素赋值filters/filter1.properties,那么这个文件里面就可以定义name=value对,这个name=value对的值就可以在工程pom中通过${name}引用,默认的filter目录是${basedir}/src/main/fiters/。

reporting设置

    reporting包含site生成阶段的一些元素,某些maven plugin可以生成reports并且在reporting下配置。reporting里面的reportSets和build里面的executions的作用都是控制pom的不同粒度去控制build的过程,我们不单要配置plugins,还要配置那些plugins单独的goals。样例如下:

<reporting> 
    <plugins> 
      <plugin> 
        ... 
        <reportSets> 
          <reportSet> 
            <id>sunlinkid> 
            <reports> 
              <report>javadocreport> 
            reports> 
            <inherited>trueinherited> 
            <configuration> 
              <links> 
                <link>http://java.sun.com/j2se/1.5.0/docs/api/link> 
              links> 
            configuration> 
          reportSet> 
        reportSets> 
      plugin> 
    plugins> 
  reporting> 

 参考网址

  • pom.xml参考网址:https://www.cnblogs.com/wkrbky/p/6353285.html
  • pom.xml文件示例:https://cloud.tencent.com/developer/article/1328093
  • Maven-dependencyManagement的使用:https://www.jianshu.com/p/e867ac845e11
  • Maven properities:https://www.jianshu.com/p/82233bdc917c
  • Maven module:https://blog.csdn.net/T2080305/article/details/80545880
  • Maven profile动态配置文件:https://www.cnblogs.com/0201zcr/p/6262762.html
  • Maven学习https://www.cnblogs.com/liu2-/p/9035181.html
  • Maven学习https://blog.csdn.net/taiyangdao/article/details/52389790
  • nexus建立maven仓库私服:https://www.cnblogs.com/zhongshengzhen/p/nexus_maven.html
  • pom.xml文件:https://www.cnblogs.com/hyhnet/p/7956197.html

转载于:https://www.cnblogs.com/wlandwl/p/pom.html

你可能感兴趣的:(java,操作系统,人工智能)