POM是項(xiàng)目對(duì)象模型(Project Object Model)的簡(jiǎn)稱(chēng),它是Maven項(xiàng)目中的文件,使用XML表示,名稱(chēng)叫做pom.xml。作用類(lèi)似ant的build.xml文件,功能更強(qiáng)大。該文件用于管理:源代碼、配置文件、開(kāi)發(fā)者的信息和角色、問(wèn)題追蹤系統(tǒng)、組織信息、項(xiàng)目授權(quán)、項(xiàng)目的url、項(xiàng)目的依賴(lài)關(guān)系等等。事實(shí)上,在Maven世界中,project可以什么都沒(méi)有,甚至沒(méi)有代碼,但是必須包含pom.xml文件。
成都創(chuàng)新互聯(lián)公司自2013年創(chuàng)立以來(lái),是專(zhuān)業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元北鎮(zhèn)做網(wǎng)站,已為上家服務(wù),為北鎮(zhèn)各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:18980820575
<project>是pom.xml的根元素,包含了一些約束信息.
<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.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
</project>
<modelVersion>4.0.0</modelVersion>
pom的版本,這是Maven 2&3唯一支持的pom版本,而且不能忽略.
<groupId>,<artifactId>與<version>標(biāo)識(shí)了倉(cāng)庫(kù)中的一個(gè)特定位置,叫項(xiàng)目坐標(biāo).三個(gè)屬性告訴了Maven項(xiàng)目中的一個(gè)特定版本,讓Maven知道如何處理它們以及在生命周期內(nèi)的哪一階段需要它們.
<groupId>表示項(xiàng)目所屬的組,通常是一個(gè)公司或者組織的名稱(chēng),如org.springframework.
<artifactId>表示項(xiàng)目的唯一標(biāo)識(shí).
<version>表示項(xiàng)目的版本號(hào),通常來(lái)說(shuō)項(xiàng)目的版本號(hào)分成三段:
主版本號(hào).次版本號(hào).修訂版本號(hào)
版本號(hào)的后綴意味著項(xiàng)目的不同階段:
打包類(lèi)型,沒(méi)有提供的話默認(rèn)值為jar,常見(jiàn)的有jar與war,也可以取值:
Maven的一個(gè)強(qiáng)大之處是處理項(xiàng)目關(guān)系的方式,可以通過(guò)一個(gè)公共的本地倉(cāng)庫(kù)去解決問(wèn)題.
POM的基礎(chǔ)就是依賴(lài)列表,Maven下載與在編譯時(shí)鏈接依賴(lài)與其他所需要的目標(biāo),而且可以處理傳遞性依賴(lài),使列表可以專(zhuān)注于項(xiàng)目所需的依賴(lài).依賴(lài)放在<dependencies>里面,包含若干個(gè)<dependency>.
<dependencies>
<dependency>
....
</dependency>
<dependency>
....
</dependency>
</dependencies>
一個(gè)<dependency>通常包含:
對(duì)應(yīng)項(xiàng)目坐標(biāo)
版本
可用于配置不同jdk的<depenency>,比如讓一個(gè)<dependency>同時(shí)支持jdk8與jdk11,可以選擇使用哪一個(gè)<classifier>,方便在不同jdk中使用.
對(duì)應(yīng)的依賴(lài)類(lèi)型,默認(rèn)為jar,通常對(duì)應(yīng)與<packaging>.
scope表示類(lèi)庫(kù)與項(xiàng)目的關(guān)系,可以取以下5個(gè)值:
當(dāng)<scope>為system才需要這個(gè),否則(當(dāng)<scope>不為system時(shí))會(huì)構(gòu)建失敗.路徑必須為絕對(duì)路徑.
標(biāo)記依賴(lài)的可選狀態(tài).
排除不需要的依賴(lài),包含子元素<exclusion>,每個(gè)<exclusion>都包含<groupId>與<artifactId>.
使用<parent>指定需要繼承的pom.
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.1.RELEASE</version>
</parent>
子pom會(huì)繼承父pom的<groupId>,<version>,<build>等眾多屬性,具體包括:
但不能繼承:
另外,就像java中所有類(lèi)都繼承于java.lang.Object一樣,所有POM都有一個(gè)"Super POM",pom都從它繼承而來(lái),下面是Maven3.5.4的"Super pom":
<project>
<modelVersion>4.0.0</modelVersion>
<repositories>
<repository>
<id>central</id>
<name>Central Repository</name>
<url>https://repo.maven.apache.org/maven2</url>
<layout>default</layout>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>central</id>
<name>Central Repository</name>
<url>https://repo.maven.apache.org/maven2</url>
<layout>default</layout>
<snapshots>
<enabled>false</enabled>
</snapshots>
<releases>
<updatePolicy>never</updatePolicy>
</releases>
</pluginRepository>
</pluginRepositories>
<build>
<directory>${project.basedir}/target</directory>
<outputDirectory>${project.build.directory}/classes</outputDirectory>
<finalName>${project.artifactId}-${project.version}</finalName>
<testOutputDirectory>${project.build.directory}/test-classes</testOutputDirectory>
<sourceDirectory>${project.basedir}/src/main/java</sourceDirectory>
<scriptSourceDirectory>${project.basedir}/src/main/scripts</scriptSourceDirectory>
<testSourceDirectory>${project.basedir}/src/test/java</testSourceDirectory>
<resources>
<resource>
<directory>${project.basedir}/src/main/resources</directory>
</resource>
</resources>
<testResources>
<testResource>
<directory>${project.basedir}/src/test/resources</directory>
</testResource>
</testResources>
<pluginManagement>
<!-- NOTE: These plugins will be removed from future versions of the super POM -->
<!-- They are kept for the moment as they are very unlikely to conflict with lifecycle mappings (MNG-4453) -->
<plugins>
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.3</version>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2-beta-5</version>
</plugin>
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.8</version>
</plugin>
<plugin>
<artifactId>maven-release-plugin</artifactId>
<version>2.5.3</version>
</plugin>
</plugins>
</pluginManagement>
</build>
<reporting>
<outputDirectory>${project.build.directory}/site</outputDirectory>
</reporting>
<profiles>
<!-- NOTE: The release profile will be removed from future versions of the super POM -->
<profile>
<id>release-profile</id>
<activation>
<property>
<name>performRelease</name>
<value>true</value>
</property>
</activation>
<build>
<plugins>
<plugin>
<inherited>true</inherited>
<artifactId>maven-source-plugin</artifactId>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<inherited>true</inherited>
<artifactId>maven-javadoc-plugin</artifactId>
<executions>
<execution>
<id>attach-javadocs</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<inherited>true</inherited>
<artifactId>maven-deploy-plugin</artifactId>
<configuration>
<updateReleaseInfo>true</updateReleaseInfo>
</configuration>
</plugin>
</plugins>
</build>
</profile>
</profiles>
</project>
模塊是pom列出的項(xiàng)目,并作為一個(gè)組執(zhí)行,每個(gè)模塊通過(guò)pom文件或項(xiàng)目的相對(duì)路徑進(jìn)行列出.
<modules>
<module>my-project</module>
<module>another-project</module>
<module>third-project/pom-example.xml</module>
</modules>
不需要考慮模塊間的依賴(lài)關(guān)系,Maven會(huì)對(duì)其進(jìn)行拓?fù)渑判蛞员阍谝蕾?lài)模塊之前構(gòu)建依賴(lài)關(guān)系.
屬性是Maven中的值占位符,像Ant一樣,可以以
${x}
這樣的形式在pom.xml的任何位置訪問(wèn)一個(gè)值,也可以被用作默認(rèn)值使用.
有5種形式使用值:
env會(huì)使用當(dāng)前shell的環(huán)境變量的值.
例如
${env.PATH}
<project>下的x元素的值,如
${project.version}
使用settings.xml中的元素的值
${settings.offline}
java系統(tǒng)屬性值,通過(guò)java.lang.System.getProperties()獲取,如
${java.home}
直接使用x,用的是<properties>下的屬性,比如
<properties>
<aaa>AAAAA</aaa>
</properties>
${aaa}
<build>,聲明項(xiàng)目結(jié)構(gòu),管理插件等.
目標(biāo)的默認(rèn)值,可以取值install,copile
構(gòu)建產(chǎn)生的文件存放目錄
構(gòu)建最終產(chǎn)生的項(xiàng)目名字,但有可能會(huì)被更改.
定義一組<filter>,<filter>內(nèi)是.properties文件,項(xiàng)目中的占位符如xxx.xxx會(huì)被.properties中的xxx=xxx的具體值替換掉.
<resources>,項(xiàng)目相關(guān)的資源文件的位置.
描述每個(gè)資源的根元素.
構(gòu)建資源的位置,對(duì)于jar包放在META-INF里面.
取值true或false,表示是否開(kāi)啟過(guò)濾
資源位置.
指定要包含的資源,使用*作為通配符.
與include相反,要排除的資源列表.
<plugins>下包含了若干個(gè)<plugin>,表示插件,每個(gè)<plugin>有以下元素:
與上面的<groupId>與<artifactId>一樣.
與上面的<version>一樣.
取值true或false,表示是否加載擴(kuò)展,默認(rèn)為false.
取值ture或false,是否應(yīng)用pom的繼承關(guān)系,默認(rèn)true.
插件項(xiàng)的相關(guān)配置,可以配置<finalName>,<appendAssemblyld>,<descriptor>等.
引入插件的依賴(lài),與前面的<dependencies>類(lèi)似.
插件可能有多個(gè)目標(biāo),<executions>配置每一個(gè)<execution>作為插件的目標(biāo),在<execution>中,用<id>指定執(zhí)行目標(biāo)的標(biāo)識(shí)符,用<goals>指定目標(biāo),<goals>包含一組<goal>,<phase>用于指定階段,<inherited>用于指定是否啟用繼承關(guān)系.另外<execution>也可以包含<configuration>,與上面類(lèi)似,用于配置特定的目標(biāo),而不是插件的所有目標(biāo).
<pluginManagement>,包含一組<plugins>,繼承于此項(xiàng)目的子項(xiàng)目都可以使用,子項(xiàng)目可以覆蓋修改<pluginManagement>.
可以為pom設(shè)置各種目錄,比如
<sourceDirectory></sourceDirectory>
構(gòu)建項(xiàng)目時(shí)會(huì)編譯該目錄的源碼,是相對(duì)于pom.xml的相對(duì)路徑.
<testSourceDirectory></testSourceDirectory>
測(cè)試時(shí)會(huì)編譯其中的源碼,也是相對(duì)于pom.xml的相對(duì)路徑.
<outputDirectory></outputDirectory>
這里存放被編譯過(guò)的class文件.
<testOutputDirectory></testOutputDirectory>
存放測(cè)試文件編譯后的class文件.
<extensions>,將包含在運(yùn)行中的構(gòu)建的類(lèi)路徑中,在構(gòu)建過(guò)程中可以激活擴(kuò)展.比如可以為,例如這是支持ftp的wagon-ftp插件:
<build>
<extensions>
<extension>
<groupId>org.apache.maven.wagon</groudId>
<artifactId>wagon-ftp</artifactId>
<version>3.3.4</version>
</extension>
</extensions>
</build>
<reporting>,描述產(chǎn)生報(bào)表的規(guī)范等,執(zhí)行"mvn site"時(shí)報(bào)表就會(huì)運(yùn)行.
是否包含默認(rèn)報(bào)表.
報(bào)表存放位置.
報(bào)表包含的插件以及配置.
包含一組<reportSet>,與<execution>類(lèi)似,配置多個(gè)目標(biāo),每個(gè)<reportSet>包含<id>,<configuration>,<inherited>,以及<reports>,<id>指定報(bào)表集合的標(biāo)識(shí)符,<configuration>表示使用的報(bào)表配置,<inherited>表示是否繼承到子pom,<reports>包含一組<report>,表示使用哪些報(bào)表.
<licenses>,包含一組<license>,每個(gè)<license>包含<name>,<url>,<distribution>,<comments>.
名稱(chēng).
官方license頁(yè)面的url.
項(xiàng)目分發(fā)的方式,可以選擇
一些補(bǔ)充信息.
<organazation>,包含<name>,<url>,與<license>的類(lèi)似.
<developers>,包含一組<developer>,每個(gè)<developer>包含:
開(kāi)發(fā)者id.
姓名.
郵箱.
主頁(yè)url.
所屬組織.
所屬組織的主頁(yè)url.
角色,包含一組<role>,一個(gè)<role>描述一個(gè)角色.
時(shí)區(qū),可以以America/New_York或Europe/Berlin這樣的形式,或者設(shè)置一個(gè)整數(shù),范圍[-11,12].
開(kāi)發(fā)者屬性,如如何處理即時(shí)消息等.
<contributors>,包含一組<contributor>,類(lèi)似于<developer>,包含<name>,<email>等元素.
<issueManagement>,定義缺陷跟蹤系統(tǒng),如Bugzilla,TestTrack,ClearQuest等,包含<system>與<url>元素,<system>指定系統(tǒng)名字,<url>指定問(wèn)題管理系統(tǒng)的url.
<ciManagement>,使用了觸發(fā)器,包含了:
持續(xù)集成系統(tǒng)的名稱(chēng).
持續(xù)集成系統(tǒng)的url.
包含一組<notifier>,用來(lái)配置觸發(fā)器,每個(gè)<notifier>包含:
如何發(fā)送通知,比如可以取值mail.
取值true/false,錯(cuò)誤時(shí)發(fā)送.
取值true/false,失敗時(shí)發(fā)送.
取值true/false,成功時(shí)發(fā)送.
取值true/false,發(fā)生警告時(shí)發(fā)送.
相關(guān)配置,例如可以添加<address>,發(fā)送的地址.
<mailingLists>,包含一組<mailingList>,表示郵件信息,包括:
郵件名稱(chēng).
訂閱郵件地址或鏈接.
取消訂閱郵件或鏈接.
要發(fā)送的郵件地址.
查看舊的郵件的url.
<scm>,也叫Source Code/Control Management,允許配置代碼庫(kù)供web站點(diǎn)和其他插件使用.包含:
描述如何通過(guò)Maven連接到版本控制系統(tǒng),其中connection需要讀權(quán)限,developConnection需要寫(xiě)權(quán)限.
代碼標(biāo)簽,默認(rèn)為HEAD.
公開(kāi)的可瀏覽的倉(cāng)庫(kù),例如ViewVC或Fisheye.
<prerequisites>,這是Maven2中的元素,只有一個(gè)子元素<maven>,指定maven的版本,且規(guī)定是2.x版本.Maven3中不需要<prerequisites>了,可以用:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
<version>3.0.0-M3</version>
<executions>
<execution>
<id>enforce-maven</id>
<goals>
<goal>enforce</goal>
</goals>
<configuration>
<rules>
<requireMavenVersion>
<version>3.0</version>
</requireMavenVersion>
</rules>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
代替.
<repositories>,包含一組<repository>,表示倉(cāng)庫(kù)的位置,每個(gè)<repository>包含:
如何處理遠(yuǎn)征倉(cāng)庫(kù)的發(fā)布版本,包含:
如何處理遠(yuǎn)程倉(cāng)庫(kù)的快照版本,包含的元素與<releases>一樣.
遠(yuǎn)程倉(cāng)庫(kù)的標(biāo)識(shí)符.
遠(yuǎn)程倉(cāng)庫(kù)的名稱(chēng).
遠(yuǎn)程倉(cāng)庫(kù)的url.
倉(cāng)庫(kù)布局類(lèi)型,可以是default或legacy,Maven2.x為倉(cāng)庫(kù)提供了默認(rèn)布局.
<pluginRepositories>,插件的遠(yuǎn)程倉(cāng)庫(kù)列表,包含一組<pluginRepository>,與<repositories>中的<repository>類(lèi)似.
<distributeManagement>,管理整個(gè)構(gòu)建過(guò)程中的分發(fā),可以把網(wǎng)站部署到遠(yuǎn)程服務(wù)器或者把構(gòu)件部署到遠(yuǎn)程倉(cāng)庫(kù).包含:
<repository>,倉(cāng)庫(kù)信息,包含:
還有一個(gè)叫<snapshotRepository>的元素,與<repository>類(lèi)似,表示快照倉(cāng)庫(kù).
<site>,定義了如何部署項(xiàng)目的站點(diǎn)與文檔.包含:
<relocation>,表示項(xiàng)目的新位置.包含:
<profiles>,包含一組<profile>,每個(gè)<profile>可以定義不同的配置,包含的元素有:
<activation>包含以下元素:
是否默認(rèn)激活,true或false.
指定jdk版本.
<os>可以定義一些特定的操作系統(tǒng)屬性,例如<name>,<family>,<arch>,<version>.
若Maven檢測(cè)到該屬性就會(huì)激活該屬性所在的配置文件,可以指定<name>與<value>.
有<exists>與<missing>兩個(gè)子元素,<exists>表示若存在<exists>元素中對(duì)應(yīng)的文件,則激活此配置文件.<miissing>表示若不存在<missing>元素中對(duì)應(yīng)的文件,則激活此配置文件.
網(wǎng)站標(biāo)題:pom.xml的配置和管理
當(dāng)前URL:http://jinyejixie.com/article2/gpeeic.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供面包屑導(dǎo)航、云服務(wù)器、App設(shè)計(jì)、移動(dòng)網(wǎng)站建設(shè)、關(guān)鍵詞優(yōu)化、企業(yè)建站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)