多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > php教程 > maven 詳解

maven 詳解

來源:程序員人生   發布時間:2016-06-08 13:10:03 閱讀次數:6370次

Maven,發音是[`meivin],”專家”的意思。寫這個學習筆記的目的,1個是為了自己備忘,2則希望能夠為其他人學習使用maven縮短1些時間。

maven是甚么

maven將自己定位為1個項目管理工具。它負責管理項目開發進程中的幾近所有的東西:

版本

maven有自己的版本定義和規則
構建

maven支持許多種的利用程序類型,對每種支持的利用程序類型都定義好了1組構建規則和工具集。
輸出管理

maven可以管理項目構建的產物,并將其加入到用戶庫中。這個功能可以用于項目組和其他部門之間的交付行動。
依賴關系

maven對依賴關系的特性進行細致的分析和劃分,避免開發進程中的依賴混亂和相互污染行動
文檔和構建結果

maven的site命令支持各種文檔信息的發布,包括構建進程的各種輸出,javadoc,產品文檔等。
項目關系

1個大型的項目通常有幾個小項目或模塊組成,用maven可以很方便地管理
移植性管理

maven可以針對不同的開發場景,輸出不同種類的輸出結果。

maven的生命周期

Maven有3套相互獨立的生命周期,分別是clean、default和site。每一個生命周期包括1些階段(phase),階段是有順序的,后面的階段依賴于前面的階段。

1、clean生命周期:清算項目,包括3個phase:

1)pre-clean:履行清算前需要完成的工作
2)clean:清算上1次構建生成的文件
3)post-clean:履行清算后需要完成的工作

2、default生命周期:構建項目,重要的phase以下

1)validate:驗證工程是不是正確,所有需要的資源是不是可用。
2)compile:編譯項目的源代碼。
3)test:使用適合的單元測試框架來測試已編譯的源代碼。這些測試不需要已打包和布署。
4)Package:把已編譯的代碼打包成可發布的格式,比如jar。
5)integration-test:如有需要,將包處理和發布到1個能夠進行集成測試的環境。
6)verify:運行所有檢查,驗證包是不是有效且到達質量標準。
7)install:把包安裝到maven本地倉庫,可以被其他工程作為依賴來使用。
8)deploy:在集成或發布環境下履行,將終究版本的包拷貝到遠程的repository,使得其他的開發者或工程可以同享。

3、site生命周期:建立和發布項目站點,phase以下:

1)pre-site:生成項目站點之前需要完成的工作
2)site:生成項目站點文檔
3)post-site:生成項目站點以后需要完成的工作
4)site-deploy:將項目站點發布到服務器

maven中所有的履行動作(goal)都需要指明自己在這個進程中的履行位置,然后maven履行的時候,就依照進程的發展順次調用這些goal進行各種處理。這個也是maven的1個基本調度機制。1般來講,位置稍后的進程都會依賴于之前的進程。固然,maven一樣提供了配置文件,可以依照用戶要求,跳過某些階段。

maven的”約定優于配置”

所謂的”約定優于配置”,在maven中其實不是完全不可以修改的,他們只是1些配置的默許值而已。但是使用者除非必要,其實不需要去修改那些約定內容。maven默許的文件寄存結構以下:

/項目目錄 pom.xml 用于maven的配置文件 /src 源代碼目錄 /src/main 工程源代碼目錄 /src/main/java 工程java源代碼目錄 /src/main/resource 工程的資源目錄 /src/test 單元測試目錄 /src/test/java /target 輸出目錄,所有的輸出物都寄存在這個目錄下 /target/classes 編譯以后的class文件

每個階段的任務都知道怎樣正確完成自己的工作,比如compile任務就知道從src/main/java下編譯所有的java文件,并把它的輸出class文件寄存到target/classes中。

對maven來講,采取”約定優于配置”的策略可以減少修改配置的工作量,也能夠下降學習本錢,更重要的是,給項目引入了統1的規范。

maven的版本規范

maven使用以下幾個要夙來唯1定位某1個輸出: groupId:artifactId:packaging:version。比如org.springframework:spring:2.5。每一個部份的解釋以下:

groupId

團體,公司,小組,組織,項目,或其它團體。團體標識的約定是,它以創建這個項目的組織名稱的逆向域名(reverse domainname)開頭。來自Sonatype的項目有1個以com.sonatype開頭的groupId,而ApacheSoftware的項目有以org.apache開頭的groupId。

artifactId

在groupId下的表示1個單獨項目的唯1標識符。比如我們的tomcat, commons等。不要在artifactId中包括點號(.)。

version

1個項目的特定版本。發布的項目有1個固定的版本標識來指向該項目的某1個特定的版本。而正在開發中的項目可以用1個特殊的標識,這類標識給版本加上1個”SNAPSHOT”的標記。
雖然項目的打包格式也是Maven坐標的重要組成部份,但是它不是項目唯1標識符的1個部份。1個項目的groupId:artifactId:version使之成為1個唯一無2的項目;你不能同時有1個具有一樣的groupId,artifactId和version標識的項目。

packaging

項目的類型,默許是jar,描寫了項目打包后的輸出。類型為jar的項目產生1個JAR文件,類型為war的項目產生1個web利用。

classifier

很少使用的坐標,1般都可以疏忽classifiers。如果你要發布一樣的代碼,但是由于技術緣由需要生成兩個單獨的構件,你就要使用1個分類器(classifier)。例如,如果你想要構建兩個單獨的構件成JAR,1個使用Java 1.4編譯器,另外一個使用Java6編譯器,你就能夠使用分類器來生成兩個單獨的JAR構件,它們有一樣的groupId:artifactId:version組合。如果你的項目使用本地擴大類庫,你可使用分類器為每個目標平臺生成1個構件。分類器經常使用于打包構件的源碼,JavaDoc或2進制集合。
maven有自己的版本規范,1般是以下定義 ..-,比如1.2.3-beta-01。要說明的是,maven自己判斷版本的算法是major,minor,incremental部份用數字比較,qualifier部份用字符串比較,所以要謹慎 alpha⑵和alpha⑴5的比較關系,最好用 alpha-02的格式。

maven在版本管理時候可使用幾個特殊的字符串 SNAPSHOT,LATEST,RELEASE。比如”1.0-SNAPSHOT”。各個部份的含義和處理邏輯以下說明:

SNAPSHOT

如果1個版本包括字符串”SNAPSHOT”,Maven就會在安裝或發布這個組件的時候將該符號展開為1個日期和時間值,轉換為UTC時間。例如,”1.0-SNAPSHOT”會在2010年5月5日下午2點10分發布時候變成1.0⑵0100505⑴41000⑴。
這個詞只能用于開發進程中,由于1般來講,項目組都會頻繁發布1些版本,最后實際發布的時候,會在這些snapshot版本中尋覓1個穩定的,用于正式發布,比如1.4版本發布之前,就會有1系列的1.4-SNAPSHOT,而實際發布的1.4,也是從中拿出來的1個穩定版。

LATEST

指某個特定構件的最新發布,這個發布多是1個發布版,也多是1個snapshot版,具體看哪一個時間最后。

RELEASE

指最后1個發布版。

maven的組成部份

maven把全部maven管理的項目分為幾個部份,1個部份是源代碼,包括源代碼本身(src/java)、相干的各種資源(src/resources),1個部份則是單元測試用例(test),另外1部份則是各種maven的插件。對這幾個部份,maven可以獨立管理他們,包括各種外部依賴關系。

maven的依賴管理

依賴管理1般是最吸引人使用maven的功能特性了,這個特性讓開發者只需要關注代碼的直接依賴,比如我們用了spring,就加入spring依賴說明就能夠了,至于spring自己還依賴哪些外部的東西,maven幫我們弄定。

任意1個外部依賴說明包括以下幾個要素:groupId, artifactId, version, scope, type, optional。其中前3個是必須的,各自含義以下:

groupId 必須
artifactId 必須
version 必須 (這里的version可以用區間表達式來表示,比如(2.0,)表示>2.0,[2.0,3.0)表示2.0<=ver<3.0;多個條件之間用逗號分隔,比如[1,3),[5,7]。)

scope:作用域限制
type:1般在pom援用依賴時候出現,其他時候不用
optional:是不是可選依賴

maven認為,程序對外部的依賴會隨著程序的所處階段和利用場景而變化,所以maven中的依賴關系有作用域(scope)的限制。在maven中,scope包括以下的取值:

compile(編譯范圍)
compile是默許的范圍;如果沒有提供1個范圍,那該依賴的范圍就是編譯范圍。編譯范圍依賴在所有的classpath中可用,同時它們也會被打包。

provided(已提供范圍)
provided依賴只有在當JDK或1個容器已提供該依賴以后才使用。例如,如果你開發了1個web利用,你可能在編譯classpath中需要可用的Servlet API來編譯1個servlet,但是你不會想要在打包好的WAR中包括這個Servlet API;這個Servlet API JAR由你的利用服務器或servlet容器提供。已提供范圍的依賴在編譯classpath(不是運行時)可用。它們不是傳遞性的,也不會被打包。

runtime(運行時范圍)
runtime依賴在運行和測試系統的時候需要,但在編譯的時候不需要。比如,你可能在編譯的時候只需要JDBC API JAR,而只有在運行的時候才需要JDBC驅動實現。

test(測試范圍)
test范圍依賴在1般的編譯和運行時都不需要,它們只有在測試編譯和測試運行階段可用。

system(系統范圍)
system范圍依賴與provided類似,但是你必須顯式的提供1個對本地系統中JAR文件的路徑。這么做是為了允許基于本地對象編譯,而這些對象是系統類庫的1部份。這樣的構件應當是1直可用的,Maven也不會在倉庫中去尋覓它。 如果你將1個依賴范圍設置成系統范圍,你必須同時提供1個systemPath元素 。注意該范圍是不推薦使用的(你應當1直盡可能去從公共或定制的Maven倉庫中援用依賴)。

另外,代碼有代碼自己的依賴,各個maven使用的插件也能夠有自己的依賴關系。依賴也能夠是可選的,比如我們代碼中沒有任何cache依賴,但是hibernate可能要配置cache,所以該cache的依賴就是可選的。

maven的多項目管理

maven的多項目管理也是非常強大的。1般來講,maven要求同1個工程的所有子項目都放置到同1個目錄下,每個子目錄代表1個項目,比如

總項目/ pom.xml 總項目的pom配置文件 子項目1/ pom.xml 子項目1的pom文件 子項目2/ pom.xml 子項目2的pom文件

依照這類格式寄存,就是繼承方式,所有具體子項目的pom.xml都會繼承總項目pom的內容,取值為子項目pom內容優先。

要設置繼承方式,首先要在總項目的pom中加入以下配置

<modules> <module>simple-webapp01</module> <module>simple-webapp02</module> </modules>

其次在每一個子項目中加入

<parent> <groupId>org.sonatype.mavenbook.ch06</groupId> <artifactId>simple-parent</artifactId> <version>1.0</version> </parent>

便可。

固然,繼承不是唯1的配置文件共用方式,maven還支持援用方式。援用pom的方式更簡單,在依賴中加入1個type為pom的依賴便可。

<project> <description>This is a project requiring JDBC</description> ... <dependencies> ... <dependency> <groupId>org.sonatype.mavenbook</groupId> <artifactId>persistence-deps</artifactId> <version>1.0</version> <type>pom</type> <-----------------> </dependency> </dependencies> </project>

屬性

用戶可以在maven中定義1些屬性,然后在其他地方用${xxx}進行援用。比如:

<project> <modelVersion>4.0.0</modelVersion> ... <properties> <var1>value1</var1> </properties> </project>

maven提供了3個隱式的變量,用來訪問系統環境變量、POM信息和maven的settings:

env
暴露操作系統的環境變量,比如env.PATH

project
暴露POM中的內容,用點號(.)的路徑來援用POM元素的值,比如${project.artifactId}。另外,java的系統屬性比如user.dir等,也暴露在這里。

settings
暴露maven的settings的信息,也能夠用點號(.)來援用。maven把系統配置文件寄存在maven的安裝目錄中,把用戶相干的配置文件寄存在~/.m2/settings.xml(unix)或%USERPROFILE%/.m2/settings.xml(windows)中。

maven的profile

profile是maven的1個重要特性,它可讓maven能夠自動適應外部的環境變化,比猶如1個項目,在linux下編譯linux的版本,在win下編譯win的版本等。1個項目可以設置多個profile,也能夠在同1時間設置多個profile被激活(active)的。自動激活的profile的條件可以是各種各樣的設定條件,組合放置在activation節點中,也能夠通過命令行直接指定。profile包括的其他配置內容可以覆蓋掉pom定義的相應值。如果認為profile設置比較復雜,可以將所有的profiles內容移動到專門的 profiles.xml 文件中,不過記得和pom.xml放在1起。

activation節點中的激活條件中常見的有以下幾個:

os - 判斷操作系統相干的參數,它包括以下可以自由組合的子節點元素
message - 規則失敗以后顯示的消息
arch - 匹配cpu結構,常見為x86
family - 匹配操作系統家族,常見的取值為:dos,mac,netware,os/2,unix,windows,win9x,os/400等
name - 匹配操作系統的名字
version - 匹配的操作系統版本號
display - 檢測到操作系統以后顯示的信息
jdk
檢查jdk版本,可以用區間表示。
property
檢查屬性值,本節點可以包括name和value兩個子節點。
file
檢查文件相干內容,包括兩個子節點:exists和missing,用于分別檢查文件存在和不存在兩種情況。

maven的使用

maven上手很快,經常使用的1些安裝配置也比較簡單,但是要找到1些比較穩定和強大的maven庫。在1般的開發中,maven都是作為插件在eclipse中或是其他的IDE環境中去使用,摁釘(ending)!??!

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 欧美一级毛片免费大片 | 国产乱码精品一区二区三上 | 亚洲三级视频在线观看 | 日本高清专区一区二无线 | 日韩一级片免费 | 国产成人免费a在线视频色戒 | 日韩一级欧美一级毛片在线 | 国产成人高清在线观看播放 | 三级国产短视频在线观看 | 英国美女一级毛片视频 | 另类小说图片 | 成人自拍视频在线观看 | 男女爱爱免费网站视频在线观看 | 在线观看三级视频 | 另类久久| 国产精品嫩草影院99av视频 | 欧美久久久久久 | 午夜久草 | 亚洲视频一区二区 | 在线看v片 | 麻豆影视视频高清在线观看 | 亚洲国产日韩欧美综合久久 | 国产美女亚洲精品久久久久久 | 另类小说综合网 | 亚洲欧美自拍另类图片色 | 激情视频区 | 亚洲专区欧美专区 | 国产精品第一页爽爽影院 | 国产91久久精品一区二区 | 华人色| 波多野结衣在线资源 | 欧美在线视频不卡 | 亚洲一二三区在线观看 | japanese日本护士com | 最近中字视频在线观看 | 亚洲免费大片 | 视频一区色眯眯视频在线 | 97碰碰碰免费公开在线视频 | 精品国产91久久久久久久 | 老年人一级特黄aa大片 | 中文字幕首页 |