Linux安装Maven、POM及配置文件详解
下載Maven
下載地址 https://maven.apache.org/download.cgi
下載maven安裝包
安裝Maven
[root@oahzero]# tar zvxf apache-maven-3.6.3-bin.tar.gzMaven是綠色版,解壓就可以使用
配置環境變量
[root@oahzero]# vim /etc/profile ... ...export MAVEN_HOME=/path/apache-maven-3.6.3 export PATH=$MAVEN_HOME/bin:$PATH [root@oahzero]# source /etc/profilePOM文件
POM(Project Object Model,項目對象模型)定義了項目的基本信息,用于描述項目如何構建,聲明項目依賴等。
project
<?xml version="1.0" encoding="UTF-8"?> <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 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion> <!--聲明當前POM模型的版本--> <parent> <!--聲明父POM坐標--> <groupId>com.zanilia</groupId> <!--項目的所屬公司或組織的域名倒寫--><artifactId>oahzero</artifactId> <!--項目名或模塊名--><version>ZLY.1.0-Release</version> <!--項目的版本信息--><relativePath/> <!-- lookup parent from repository --></parent><groupId></groupId> <!--項目的所屬公司或組織的域名倒寫--><artifactId></artifactId> <!--項目名或模塊名--><version></version> <!--項目的版本信息--><packaging></packaging> <!--打包方式--><name>模塊名</name><description>模塊描述</description><modules> <!--包含的子模塊--><module>子模塊</module></modules><properties></properties> <!--范圍參數配置--><dependencyManagement> <!--依賴管理--><dependencies>...<dependency><groupId></groupId><artifactId></artifactId><version></version><type>pom</type><scope></scope> <!--依賴的作用范圍 有編譯、運行、測試編譯、測試運行、打包階段--><optional></optional> <!--標記依賴是否可選--><exclusions> <!--排除一些傳遞性依賴--><exclusion><groupId></groupId><artifactId></artifactId></exclusion></exclusions></dependency>...</dependencies></dependencyManagement><build><finalName>${project.artifactId}</finalName> <!--構建目標文件的名稱--><directory>${basedir}/target</directory> <!-- 構建產生的所有文件存放的目錄--> <defaultGoal>install</defaultGoal> <!--必須跟命令行上的參數相同--> <filters> <!--當filtering開關打開時,使用到的過濾器屬性文件列表。 --> <filter>../filter.properties</filter> <!--項目配置信息中諸如${spring.version}之類的占位符會被屬性文件中的實際值替換掉 --> </filters> <!--項目源碼目錄,當構建項目的時候,構建系統會編譯目錄里的源碼。該路徑是相對于pom.xml的相對路徑。 --> <sourceDirectory>${basedir}\src\main\java</sourceDirectory> <!--項目腳本源碼目錄,該目錄和源碼目錄不同, <!-- 絕大多數情況下,該目錄下的內容會被拷貝到輸出目錄(因為腳本是被解釋的,而不是被編譯的)。 --> <scriptSourceDirectory>${basedir}\src\main\scripts </scriptSourceDirectory> <!--項目單元測試使用的源碼目錄,當測試項目的時候,構建系統會編譯目錄里的源碼。該路徑是相對于pom.xml的相對路徑。 --> <testSourceDirectory>${basedir}\src\test\java</testSourceDirectory> <!--被編譯過的應用程序class文件存放的目錄。 --> <outputDirectory>${basedir}\target\classes</outputDirectory> <!--被編譯過的測試class文件存放的目錄。 --> <testOutputDirectory>${basedir}\target\test-classes </testOutputDirectory> <!--項目的一系列構建擴展,它們是一系列build過程中要使用的產品,會包含在running bulid‘s classpath里面。 --> <!--他們可以開啟extensions,也可以通過提供條件來激活plugins。 --> <!--簡單來講,extensions是在build過程被激活的產品 --> <extensions> <!--例如,通常情況下,程序開發完成后部署到線上Linux服務器,可能需要經歷打包、 --> <!--將包文件傳到服務器、SSH連上服務器、敲命令啟動程序等一系列繁瑣的步驟。 --> <!--實際上這些步驟都可以通過Maven的一個插件 wagon-maven-plugin 來自動完成 --> <!--下面的擴展插件wagon-ssh用于通過SSH的方式連接遠程服務器, --> <!--類似的還有支持ftp方式的wagon-ftp插件 --> <extension> <groupId>org.apache.maven.wagon</groupId> <artifactId>wagon-ssh</artifactId> <version>2.8</version> </extension> </extensions> <plugins><plugin><groupId></groupId><artifactId></artifactId><version></version><extensions>false</extensions> <!-- true或者false,默認是false。是否加載此插件的擴展。--><inherited>true</inherited> <!-- true或false,默認值為true。這個plugin的配置是否應該應用于從此plugin繼承的POM。 --><configuration> <!-- 配置插件參數 --><source>1.8</source><target>1.8</target><compilerArguments><bootclasspath>${JAVA_HOME}/jre/lib/rt.jar</bootclasspath></compilerArguments></configuration><executions> <!--在構建生命周期中執行一組目標的配置。每個目標可能有不同的配置。 --><execution><id>assembly</id> <!--執行目標的標識符,用于標識構建過程中的目標,或者匹配繼承過程中需要合并的執行目標 --> <phase>package</phase> <!--綁定了目標的構建生命周期階段,如果省略,目標會被綁定到源數據里配置的默認階段 --> <goals> <goal>single</goal> <!--配置的執行目標 repackage--> </goals> <inherited>false</inherited> <!--配置是否被傳播到子POM --> <configuration><finalName>${project.artifactId}</finalName> </configuration></execution></executions><dependencies></dependencies> <!-- 改變插件的依賴 --></plugin></plugins><!--主要定義插件的共同元素、擴展元素集合,類似于dependencyManagement, --> <!--所有繼承于此項目的子項目都能使用。該插件配置項直到被引用時才會被解析或綁定到生命周期。 --> <!--給定插件的任何本地配置都會覆蓋這里的配置 --> <pluginManagement> <plugins>...</plugins> </pluginManagement> <resources> <!-- 資源元素列表 --><resource> <!--項目相關的所有資源路徑列表,例如和項目相關的配置文件、屬性文件,這些資源被包含在最終的打包文件里。 --> <!--描述了資源的目標路徑。該路徑相對target/classes目錄(例如${project.build.outputDirectory})。 --> <!--舉個例子,如果你想資源在特定的包里(org.apache.maven.messages),你就必須該元素設置為org/apache/maven/messages。 --> <!--然而,如果你只是想把資源放到源碼目錄結構里,就不需要該配置。 --> <targetPath>resources</targetPath> <directory>${basedir}/src/main/resources</directory> <!-- 定義資源的位置 該路徑相對POM路徑--><filtering>true</filtering> <!--是否使用參數值代替參數名。參數值取自properties元素或者文件里配置的屬性,文件在filters元素里列出。 --> <includes> <!-- 指定包含的資源文件,用 * 號做通配符。 --><include>**/application*.yml</include><include>**/application*.properties</include></includes><excludes> <!--排除的模式列表 如果<include>與<exclude>劃定的范圍存在沖突,以<exclude>為準 --> <exclude>jdbc.properties</exclude></excludes></resource></resources><testResources> <!-- 測試資源元素列表 --><testResource>${basedir}/src/test/resources</testResource> <!-- 配置與資源元素類似,在測試階段使用。測試資源不會被部署。 --></testResources></build><!--項目分發信息,在執行mvn deploy后表示要發布的位置。 --> <!--有了這些信息就可以把網站部署到遠程服務器或者把構件部署到遠程倉庫。 --> <distributionManagement><!--部署項目產生的構件到遠程倉庫需要的信息 --> <repository><!--是分配給快照一個唯一的版本號(由時間戳和構建流水號),還是每次都使用相同的版本號 --> <!--參見repositories/repository元素 --> <uniqueVersion>true</uniqueVersion> <id>msf-release</id><name>msf-release</name><url>http://10.10.108.39:8081/repository/Life-Agent-releases/</url><layout /> </repository><!--構件的快照部署到哪里,如果沒有配置該元素,默認部署到repository元素配置的倉庫 --> <snapshotRepository><id>msf-snapshot</id><name>msf-snapshot</name><url>http://10.10.108.39:8081/repository/Life-Agent-snapshots/</url></snapshotRepository><!--部署項目的網站需要的信息 --> <site> <!--部署位置的唯一標識符,用來匹配站點和settings.xml文件里的配置 --> <id> site-id </id> <!--部署位置的名稱 --> <name> site-name</name> <!--部署位置的URL,按protocol://hostname/path形式 --> <url>scp://svn.baidu.com/banseon:/var/www/localhost/banseon-web </url> </site> <!--項目下載頁面的URL。如果沒有該元素,用戶應該參考主頁。 --> <!--使用該元素的原因是:幫助定位那些不在倉庫里的構件(由于license限制)。 --> <downloadUrl /> <!--如果構件有了新的groupID和artifact ID(構件移到了新的位置),這里列出構件的重定位信息。 --> <relocation> <!--構件新的group ID --> <groupId /> <!--構件新的artifact ID --> <artifactId /> <!--構件新的版本號 --> <version /> <!--顯示給用戶的,關于移動的額外信息,例如原因。 --> <message /> </relocation> <!--給出該構件在遠程倉庫的狀態。不得在本地項目中設置該元素,因為這是工具自動更新的。 --> <!--有效的值有:none(默認),converted(倉庫管理員從Maven 1 POM轉換過來), --> <!--partner(直接從伙伴Maven 2倉庫同步過來),deployed(從Maven 2實例部署),verified(被核實時正確的和最終的)。 --> <status /> </distributionManagement><repositories><repository><id>ICS-Repositories</id><name>ICS-Repositories</name><url>http://10.1.17.21:8081/nexus/content/groups/ICS-Repositories/</url><!--如何處理遠程倉庫里發布版本的下載 --> <releases><enabled>true</enabled> <!--true或者false表示該倉庫是否為下載某種類型構件(發布版,快照版)開啟。 --> <!--該元素指定更新發生的頻率。Maven會比較本地POM和遠程POM的時間戳。 --> <!--這里的選項是:always(一直),daily(默認,每日), --> <!--interval:X(這里X是以分鐘為單位的時間間隔),或者never(從不)。 --> <updatePolicy>never</updatePolicy><!--當Maven驗證構件校驗文件失敗時該怎么做: --> <!--ignore(忽略),fail(失敗),或者warn(警告)。 --> <checksumPolicy>warn</checksumPolicy></releases><!--如何處理遠程倉庫里快照版本的下載。有了releases和snapshots這兩組配置, --> <!--POM就可以在每個單獨的倉庫中,為每種類型的構件采取不同的策略。 --> <!--例如,可能有人會決定只為開發目的開啟對快照版本下載的支持 --> <snapshots><enabled>true</enabled><updatePolicy>always</updatePolicy><checksumPolicy>warn</checksumPolicy></snapshots><!--遠程倉庫唯一標識符。可以用來匹配在settings.xml文件里配置的遠程倉庫 --> <id> repo-id </id> <!--遠程倉庫名稱 --> <name> repo-name</name> <!--遠程倉庫URL,按protocol://hostname/path形式 --> <url>http://192.168.1.169:9999/repository/ </url> <!--用于定位和排序構件的倉庫布局類型-可以是default(默認)或者legacy(遺留)。 --> <!--Maven 2為其倉庫提供了一個默認的布局; --> <!--然而,Maven1.x有一種不同的布局。 --> <!--我們可以使用該元素指定布局是default(默認)還是legacy(遺留)。 --> <layout> default</layout> </repository></repositories><!--發現插件的遠程倉庫列表,這些插件用于構建和報表 --> <pluginRepositories> <!--包含需要連接到遠程插件倉庫的信息.參見repositories/repository元素 --> <pluginRepository /> </pluginRepositories> <!--在列的項目構建profile,如果被激活,會修改構建處理 --> <profiles> <!--根據環境參數或命令行參數激活某個構建處理 --> <profile> <!--自動觸發profile的條件邏輯。Activation是profile的開啟鑰匙。 --> <activation> <!--profile默認是否激活的標識 --> <activeByDefault>false</activeByDefault> <!--activation有一個內建的java版本檢測,如果檢測到jdk版本與期待的一樣,profile被激活。 --> <jdk>1.7</jdk> <!--當匹配的操作系統屬性被檢測到,profile被激活。os元素可以定義一些操作系統相關的屬性。 --> <os> <!--激活profile的操作系統的名字 --> <name>Windows XP</name> <!--激活profile的操作系統所屬家族(如 'windows') --> <family>Windows</family> <!--激活profile的操作系統體系結構 --> <arch>x86</arch> <!--激活profile的操作系統版本 --> <version>5.1.2600</version> </os> <!--如果Maven檢測到某一個屬性(其值可以在POM中通過${名稱}引用),其擁有對應的名稱和值,Profile就會被激活。 --> <!-- 如果值字段是空的,那么存在屬性名稱字段就會激活profile,否則按區分大小寫方式匹配屬性值字段 --> <property> <!--激活profile的屬性的名稱 --> <name>mavenVersion</name> <!--激活profile的屬性的值 --> <value>2.0.3</value> </property> <!--提供一個文件名,通過檢測該文件的存在或不存在來激活profile。missing檢查文件是否存在,如果不存在則激活profile。 --> <!--另一方面,exists則會檢查文件是否存在,如果存在則激活profile。 --> <file> <!--如果指定的文件存在,則激活profile。 --> <exists>/usr/local/hudson/hudson-home/jobs/maven-guide-zh-to-production/workspace/</exists> <!--如果指定的文件不存在,則激活profile。 --> <missing>/usr/local/hudson/hudson-home/jobs/maven-guide-zh-to-production/workspace/</missing> </file> </activation> <id /> <build /> <modules /> <repositories /> <pluginRepositories /> <dependencies /> <reporting /> <dependencyManagement /> <distributionManagement /> <properties /> </profile> </project>version配置規范
| sit | ZLY.1.0.Alpha-SNAPSHOT |
| uat | ZLY.1.0.Beta-SNAPSHOT |
| stg | ZLY.1.0.RC-SNAPSHOT |
| master | ZLY.1.0-Release |
packaging配置
| pom | 父模塊 |
| war | web模塊 |
| jar | java模塊 |
dependencyManagement
- dependencies即使在子項目中不寫該依賴項,那么子項目仍然會從父項目中繼承該依賴項(全部繼承)
- dependencyManagement里只是聲明依賴,并不實現引入,因此子項目需要顯示的聲明需要用的依賴。如果不在子項目中聲明依賴,是不會從父項目中繼承下來的;只有在子項目中寫了該依賴項,并且沒有指定具體版本,才會從父項目中繼承該項,并且version和scope都讀取自父pom;另外如果子項目中指定了版本號,那么會使用子項目中指定的jar版本。
dependencies
dependency
scope
| compile | scope默認值。參與到編譯、運行、測試編譯、測試運行階段,會被打包 |
| provided | 參與到編譯、測試編譯階段,不會被打包。該依賴關系不具有傳遞性 |
| runtime | 參與到運行、測試運行階段,會被打包 |
| test | 參與到測試編譯、測試運行階段。不會被打包,它不具有傳遞性 |
| system | 類似provided,不過依賴不會從maven遠程中央倉庫下載,而是從本地maven倉庫中獲取 |
type
optional
| false | optional 默認為 false,當其他項目依賴此項目時會引入該依賴 |
| true | 當其他項目依賴此項目時不會引入該依賴 |
build
repositories
profile
profile配置項在setting.xml中也有,是pom.xml中profile元素的裁剪版本,包含了id,activation, repositories, pluginRepositories和 properties元素。這里的profile元素只包含這五個子元素是因為setting.xml只關心構建系統這個整體(這正是settings.xml文件的角色定位),而非單獨的項目對象模型設置。如果一個settings中的profile被激活,它的值會覆蓋任何其它定義在POM中或者profile.xml中的帶有相同id的profile。
pom.xml中的profile可以看做pom.xml的副本,擁有與pom.xml相同的子元素與配置方法。它包含可選的activation(profile的觸發器)和一系列的changes。例如test過程可能會指向不同的數據庫(相對最終的deployment)或者不同的dependencies或者不同的repositories,并且是根據不同的JDK來改變的。只需要其中一個成立就可以激活profile,如果第一個條件滿足了,那么后面就不會在進行匹配。
報表配置
<!--描述使用報表插件產生報表的規范,特定的maven 插件能輸出相應的定制和配置報表. --> <!--當用戶執行“mvn site”,這些報表就會運行,在頁面導航欄能看到所有報表的鏈接。 --> <reporting> <!--true,則網站不包括默認的報表。這包括“項目信息”菜單中的報表。 --> <excludeDefaults /> <!--所有產生的報表存放到哪里。默認值是${project.build.directory}/site。 --> <outputDirectory /> <!--使用的報表插件和他們的配置。 --> <plugins> <plugin> <groupId /> <artifactId /> <version /> <inherited /> <configuration> <links> <link>http://java.sun.com/j2se/1.5.0/docs/api/</link> </links> </configuration> <!--一組報表的多重規范,每個規范可能有不同的配置。 --> <!--一個規范(報表集)對應一個執行目標 。例如,有1,2,3,4,5,6,7,8,9個報表。 --> <!--1,2,5構成A報表集,對應一個執行目標。2,5,8構成B報表集,對應另一個執行目標 --> <reportSets> <!--表示報表的一個集合,以及產生該集合的配置 --> <reportSet> <!--報表集合的唯一標識符,POM繼承時用到 --> <id>sunlink</id> <!--產生報表集合時,被使用的報表的配置 --> <configuration /> <!--配置是否被繼承到子POMs --> <inherited /> <!--這個集合里使用到哪些報表 --> <reports> <report>javadoc</report> </reports> </reportSet> </reportSets> </plugin> </plugins> </reporting>環境配置
<!--項目的問題管理系統(Bugzilla, Jira, Scarab,或任何你喜歡的問題管理系統)的名稱和URL,本例為 jira --> <issueManagement> <!--問題管理系統(例如jira)的名字, --> <system> jira </system> <!--該項目使用的問題管理系統的URL --> <url> http://jira.clf.com/</url> </issueManagement> <!--項目持續集成信息 --> <ciManagement> <!--持續集成系統的名字,例如continuum --> <system /> <!--該項目使用的持續集成系統的URL(如果持續集成系統有web接口的話)。 --> <url /> <!--構建完成時,需要通知的開發者/用戶的配置項。包括被通知者信息和通知條件(錯誤,失敗,成功,警告) --> <notifiers> <!--配置一種方式,當構建中斷時,以該方式通知用戶/開發者 --> <notifier> <!--傳送通知的途徑 --> <type /> <!--發生錯誤時是否通知 --> <sendOnError /> <!--構建失敗時是否通知 --> <sendOnFailure /> <!--構建成功時是否通知 --> <sendOnSuccess /> <!--發生警告時是否通知 --> <sendOnWarning /> <!--不贊成使用。通知發送到哪里 --> <address /> <!--擴展配置項 --> <configuration /> </notifier> </notifiers> </ciManagement>項目信息配置
<!--項目的名稱, Maven產生的文檔用 --> <name>banseon-maven </name> <!--項目主頁的URL, Maven產生的文檔用 --> <url>http://www.clf.com/ </url> <!--項目的詳細描述, Maven 產生的文檔用。 當這個元素能夠用HTML格式描述時 --> <!--(例如,CDATA中的文本會被解析器忽略,就可以包含HTML標簽),不鼓勵使用純文本描述。 --> <!-- 如果你需要修改產生的web站點的索引頁面,你應該修改你自己的索引頁文件,而不是調整這里的文檔。 --> <description>A maven project to study maven. </description> <!--描述了這個項目構建環境中的前提條件。 --> <prerequisites> <!--構建該項目或使用該插件所需要的Maven的最低版本 --> <maven /> </prerequisites> <!--項目創建年份,4位數字。當產生版權信息時需要使用這個值。 --> <inceptionYear /> <!--項目相關郵件列表信息 --> <mailingLists> <!--該元素描述了項目相關的所有郵件列表。自動產生的網站引用這些信息。 --> <mailingList> <!--郵件的名稱 --> <name> Demo </name> <!--發送郵件的地址或鏈接,如果是郵件地址,創建文檔時,mailto: 鏈接會被自動創建 --> <post> clf@126.com</post> <!--訂閱郵件的地址或鏈接,如果是郵件地址,創建文檔時,mailto: 鏈接會被自動創建 --> <subscribe> clf@126.com</subscribe> <!--取消訂閱郵件的地址或鏈接,如果是郵件地址,創建文檔時,mailto: 鏈接會被自動創建 --> <unsubscribe> clf@126.com</unsubscribe> <!--你可以瀏覽郵件信息的URL --> <archive> http:/hi.clf.com/</archive> </mailingList> </mailingLists> <!--項目開發者列表 --> <developers> <!--某個項目開發者的信息 --> <developer> <!--SCM里項目開發者的唯一標識符 --> <id> HELLO WORLD </id> <!--項目開發者的全名 --> <name> banseon </name> <!--項目開發者的email --> <email> banseon@126.com</email> <!--項目開發者的主頁的URL --> <url /> <!--項目開發者在項目中扮演的角色,角色元素描述了各種角色 --> <roles> <role> Project Manager</role> <role>Architect </role> </roles> <!--項目開發者所屬組織 --> <organization> demo</organization> <!--項目開發者所屬組織的URL --> <organizationUrl>http://hi.clf.com/ </organizationUrl> <!--項目開發者屬性,如即時消息如何處理等 --> <properties> <dept> No </dept> </properties> <!--項目開發者所在時區, -11到12范圍內的整數。 --> <timezone> -5</timezone> </developer> </developers> <!--項目的其他貢獻者列表 --> <contributors> <!--項目的其他貢獻者。參見developers/developer元素 --> <contributor> <name /> <email /> <url /> <organization /> <organizationUrl /> <roles /> <timezone /> <properties /> </contributor> </contributors> <!--該元素描述了項目所有License列表。應該只列出該項目的license列表,不要列出依賴項目的license列表。 --> <!--如果列出多個license,用戶可以選擇它們中的一個而不是接受所有license。 --> <licenses> <!--描述了項目的license,用于生成項目的web站點的license頁面,其他一些報表和validation也會用到該元素。 --> <license> <!--license用于法律上的名稱 --> <name> Apache 2 </name> <!--官方的license正文頁面的URL --> <url>http://www.clf.com/LICENSE-2.0.txt </url> <!--項目分發的主要方式: repo,可以從Maven庫下載 manual, 用戶必須手動下載和安裝依賴 --> <distribution> repo</distribution> <!--關于license的補充信息 --> <comments> Abusiness-friendly OSS license </comments> </license> </licenses> <!--SCM(Source Control Management)標簽允許你配置你的代碼庫,供Maven web站點和其它插件使用。 --> <scm> <!--SCM的URL,該URL描述了版本庫和如何連接到版本庫。欲知詳情,請看SCMs提供的URL格式和列表。該連接只讀。 --> <connection>scm:svn:http://svn.baidu.com/banseon/maven/</connection> <!--給開發者使用的,類似connection元素。即該連接不僅僅只讀 --> <developerConnection>scm:svn:http://svn.baidu.com/banseon/maven/ </developerConnection> <!--當前代碼的標簽,在開發階段默認為HEAD --> <tag /> <!--指向項目的可瀏覽SCM庫(例如ViewVC或者Fisheye)的URL。 --> <url> http://svn.baidu.com/banseon</url> </scm> <!--描述項目所屬組織的各種屬性。Maven產生的文檔用 --> <organization> <!--組織的全名 --> <name> demo </name> <!--組織主頁的URL --> <url> http://www.clf.com/</url> </organization>配置文件
Maven配置文件會有兩個
- 用戶配置文件 (用戶目錄的.m2子目錄下)
- 全局配置文件(安裝目錄的conf子目錄下)
優先級 :pom > 用戶配置文件> 全局配置文件
Setting
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0https://maven.apache.org/xsd/settings-1.0.0.xsd"><!--構建系統本地倉庫的路徑--><localRepository>${user.home}/.m2/repository</localRepository><!--表示maven是否需要和用戶交互以獲得輸入 默認為true 需要交互--><interactiveMode>true</interactiveMode><!--maven是否需要使用plugin-registry.xml文件來管理插件版本 默認為false 不需要--><usePluginRegistry>false</usePluginRegistry><!--構建系統需要在離線模式下運行,則為true,默認為false。--><offline>false</offline><!--通過plugin的前綴來解析plugin的坐標。pluginGroup元素指定的是plugin的groupId--><!--Maven會自動添加org.apache.maven.plugins 和 org.codehaus.mojo --><pluginGroups><!--plugin的組織Id(groupId) --><pluginGroup>org.codehaus.mojo</pluginGroup></pluginGroups><!--配置服務端的一些設置。一些設置如安全證書不應該和pom.xml一起分發。這種類型的信息應該存在于構建服務器上的settings.xml文件中。 --><servers><!--服務器元素包含配置服務器時需要的信息 --><server><!--這是server的id(注意不是用戶登陸的id),該id與distributionManagement中repository元素的id相匹配。 --><id>server001</id><!--鑒權用戶名。鑒權用戶名和鑒權密碼表示服務器認證所需要的登錄名和密碼。 --><username>my_login</username><!--鑒權密碼 。鑒權用戶名和鑒權密碼表示服務器認證所需要的登錄名和密碼。密碼加密功能已被添加到2.1.0 +。詳情請訪問密碼加密頁面 --><password>my_password</password><!--鑒權時使用的私鑰位置。和前兩個元素類似,私鑰位置和私鑰密碼指定了一個私鑰的路徑(默認是${user.home}/.ssh/id_dsa)以及如果需要的話,一個密語。將來passphrase和password元素可能會被提取到外部,但目前它們必須在settings.xml文件以純文本的形式聲明。 --><privateKey>${usr.home}/.ssh/id_dsa</privateKey><!--鑒權時使用的私鑰密碼。 --><passphrase>some_passphrase</passphrase><!--文件被創建時的權限。如果在部署的時候會創建一個倉庫文件或者目錄,這時候就可以使用權限(permission)。這兩個元素合法的值是一個三位數字,其對應了unix文件系統的權限,如664,或者775。 --><filePermissions>664</filePermissions><!--目錄被創建時的權限。 --><directoryPermissions>775</directoryPermissions></server></servers><!--用于定義一系列的遠程倉庫的鏡像。我們可以在pom中定義一個下載工件的時候所使用的遠程倉庫。但是有時候這個遠程倉庫會比較忙,所以這個時候人們就想著給它創建鏡像以緩解遠程倉庫的壓力,也就是說會把對遠程倉庫的請求轉換到對其鏡像地址的請求。每個遠程倉庫都會有一個id,這樣我們就可以創建自己的mirror來關聯到該倉庫,那么以后需要從遠程倉庫下載工件的時候Maven就可以從我們定義好的mirror站點來下載,這可以很好的緩解我們遠程倉庫的壓力。在我們定義的mirror中每個遠程倉庫都只能有一個mirror與它關聯,也就是說你不能同時配置多個mirror的mirrorOf指向同一個repositoryId。--><mirrors><!-- 給定倉庫的下載鏡像。 --><mirror><!-- 該鏡像的唯一標識符。id用來區分不同的mirror元素。 --><id>mirrorId</id><!-- 鏡像名稱 --><name>PlanetMirror Australia</name><!-- 該鏡像的URL。構建系統會優先考慮使用該URL,而非使用默認的服務器URL。 --><url>http://downloads.planetmirror.com/pub/maven2</url><!-- 被鏡像的服務器的id。例如,如果我們要設置了一個Maven中央倉庫(http://repo.maven.apache.org/maven2/)的鏡像,就需要將該元素設置成central。這必須和中央倉庫的id central完全一致。 --><mirrorOf>repositoryId</mirrorOf></mirror></mirrors><!--用來配置不同的代理--><proxies><!--代理元素包含配置代理時需要的信息 --><proxy><!--代理的唯一定義符,用來區分不同的代理元素。 --><id>myproxy</id><!--該代理是否是激活的那個。true則激活代理。當我們聲明了一組代理,而某個時候只需要激活一個代理的時候,該元素就可以派上用處。 --><active>true</active><!--代理的協議。 協議://主機名:端口,分隔成離散的元素以方便配置。 --><protocol>http</protocol><!--代理的主機名。協議://主機名:端口,分隔成離散的元素以方便配置。 --><host>proxy.somewhere.com</host><!--代理的端口。協議://主機名:端口,分隔成離散的元素以方便配置。 --><port>8080</port><!--代理的用戶名,用戶名和密碼表示代理服務器認證的登錄名和密碼。 --><username>proxyuser</username><!--代理的密碼,用戶名和密碼表示代理服務器認證的登錄名和密碼。 --><password>somepassword</password><!--不該被代理的主機名列表。該列表的分隔符由代理服務器指定;例子中使用了豎線分隔符,使用逗號分隔也很常見。 --><nonProxyHosts>*.google.com|ibiblio.org</nonProxyHosts></proxy></proxies><!--根據環境參數來調整構建配置的列表。settings.xml中的profile元素是pom.xml中profile元素的裁剪版本。它包含了id、activation、repositories、pluginRepositories和 properties元素。這里的profile元素只包含這五個子元素是因為這里只關心構建系統這個整體(這正是settings.xml文件的角色定位),而非單獨的項目對象模型設置。如果一個settings.xml中的profile被激活,它的值會覆蓋任何其它定義在pom.xml中帶有相同id的profile。當所有的約束條件都滿足的時候就會激活這個profile--><profiles><profile><!-- profile的唯一標識 --><id>test</id> <!-- 自動觸發profile的條件邏輯 --><activation><activeByDefault>false</activeByDefault><jdk>1.6</jdk><os><name>Windows 7</name><family>Windows</family><arch>x86</arch><version>5.1.2600</version></os><property><name>mavenVersion</name><value>2.0.3</value></property><file><exists>${basedir}/file2.properties</exists><missing>${basedir}/file1.properties</missing></file></activation><!-- 擴展屬性列表 --><properties /><!-- 遠程倉庫列表 --><repositories /><!-- 插件倉庫列表 --><pluginRepositories />...</profile></profiles><!-- 手動激活profiles的列表,按照profile被應用的順序定義activeProfile。 該元素包含了一組activeProfile元素,每個activeProfile都含有一個profile id。任何在activeProfile中定義的profile id,不論環境設置如何,其對應的 profile都會被激活。如果沒有匹配的profile,則什么都不會發生。 例如,env-test是一個activeProfile,則在pom.xml(或者profile.xml)中對應id的profile會被激活。如果運行過程中找不到這樣一個profile,Maven則會像往常一樣運行 --><activeProfiles><!-- 要激活的profile id --><activeProfile>env-test</activeProfile></activeProfiles> </settings>Profiles
作用:根據環境參數來調整構建配置的列表。
settings.xml中的profile元素是pom.xml中profile元素的裁剪版本。它包含了id、activation、repositories、pluginRepositories和 properties元素。這里的profile元素只包含這五個子元素是因為這里只關心構建系統這個整體(這正是settings.xml文件的角色定位),而非單獨的項目對象模型設置。如果一個settings.xml中的profile被激活,它的值會覆蓋任何其它定義在pom.xml中帶有相同id的profile。當所有的約束條件都滿足的時候就會激活這個profile。
Activation
作用:自動觸發profile的條件邏輯。
這是profile中最重要的元素。跟pom.xml中的profile一樣,settings.xml中的profile也可以在特定環境下改變一些值,而這些環境是通過activation元素來指定的。activation元素并不是激活profile的唯一方式。settings.xml文件中的activeProfile元素可以包含profile的id。profile也可以通過在命令行,使用-P標記和逗號分隔的列表來顯式的激活(如,-P test)
- jdk:表示當jdk的版本滿足條件的時候激活,在這里是1.6。這里的版本還可以用一個范圍來表示,如
- os:表示當操作系統滿足條件的時候激活。
- property:property是鍵值對的形式,表示當Maven檢測到了這樣一個鍵值對的時候就激活該profile
這個時候如果要激活該profile的話,可以在調用Maven指令的時候加上參數hello并指定其值為world,如:
mvn compile –Dhello=world- file:表示當文件存在或不存在的時候激活,exists表示存在,missing表示不存在。如下面例子表示當文件hello/world不存在的時候激活該profile。
-
activeByDefault:當其值為true的時候表示如果沒有其他的profile處于激活狀態的時候,該profile將自動被激活
-
properties:用于定義屬性鍵值對的。當該profile是激活狀態的時候,properties下面指定的屬性都可以在pom.xml中使用。對應profile的擴展屬性列表。
maven屬性和ant中的屬性一樣,可以用來存放一些值。這些值可以在pom.xml中的任何地方使用標記${X}來使用,這里X是指屬性的名稱。屬性有五種不同的形式,并且都能在settings.xml文件中訪問。如果該profile被激活,則可以在pom.xml中使用${user.install} 。
- repositories:用于定義遠程倉庫的,當該profile是激活狀態的時候,這里面定義的遠程倉庫將作為當前pom的遠程倉庫。它是maven用來填充構建系統本地倉庫所使用的一組遠程倉庫。
(1) releases、snapshots:這是對于工件的類型的限制。
(2) enabled:表示這個倉庫是否允許這種類型的工件
(3) updatePolicy:表示多久嘗試更新一次。可選值有always、daily、interval:minutes(表示每多久更新一次)和never。
(4) checksumPolicy:當Maven在部署項目到倉庫的時候會連同校驗文件一起提交,checksumPolicy表示當這個校驗文件缺失或不正確的時候該如何處理,可選項有ignore、fail和warn。
- pluginRepositories:在Maven中有兩種類型的倉庫,一種是存儲工件的倉庫,另一種就是存儲plugin插件的倉庫。pluginRepositories的定義和repositories的定義類似,它表示Maven在哪些地方可以找到所需要的插件。和repository類似,只是repository是管理jar包依賴的倉庫,pluginRepositories則是管理插件的倉庫。maven插件是一種特殊類型的構件。由于這個原因,插件倉庫獨立于其它倉庫。pluginRepositories元素的結構和repositories元素的結構類似。每個pluginRepository元素指定一個Maven可以用來尋找新插件的遠程地址。
總結
以上是生活随笔為你收集整理的Linux安装Maven、POM及配置文件详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java VPI文档 (JDK帮助文档)
- 下一篇: linux调节屏幕软件下载,touchs