Maven3.0學習文檔_第1頁
Maven3.0學習文檔_第2頁
Maven3.0學習文檔_第3頁
Maven3.0學習文檔_第4頁
Maven3.0學習文檔_第5頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、Maven入門教程1.1. 介紹、環(huán)境配置1.1.1. Maven介紹Maven是一個采用純Java編寫的開源項目管理工具, Maven采用了一種被稱之為Project Object Model (POM)概念來管理項目,所有的項目配置信息都被定義在一個叫做POM.xml的文件中, 通過該文件Maven可以管理項目的整個聲明周期,包括清除、編譯,測試,報告、打包、部署等等。目前Apache下絕大多數(shù)項目都已經(jīng)采用Maven進行管理. 而Maven本身還支持多種插件, 可以方便更靈活的控制項目, 開發(fā)人員的主要任務應該是關注商業(yè)邏輯并去實現(xiàn)它, 而不是把時間浪費在學習如何在不同的環(huán)境中去依賴ja

2、r包,項目部署等。Maven正是為了將開發(fā)人員從這些任務中解脫出來而誕生的1.1.2. Maven能夠做什么l Jar的聲明式依賴性管理l 項目自動構建1.1.3. 環(huán)境配置l /download.html 下載最新版本Maven 3.0.2 (Binary zip)l 解壓到 D(本身就是綠色版不需要安裝):l 配置環(huán)境變量(配置之前,必須確定配置了JDK環(huán)境變量)MAVEN_HOME : D:apache-maven-3.0.2把此命令添加到Path中: %MAVEN_HOME%binl 配置用戶范圍的settings.xmlMAVEN_HOME

3、/conf/settings.xml 全局的/.m2/settings.xml 單個用戶的l 驗證安裝是否成功在命令行上輸入: mvn -version;回車, 如看到下面信息表示安裝成功1.1.4. Maven目錄分析l bin:含有mvn運行的腳本l boot:含有plexus-classworlds類加載器框架l conf:含有settings.xml配置文件l lib:含有Maven運行時所需要的java類庫l Settings.xml 中默認的用戶庫: $user.home/.m2/repository通過maven下載的jar包都會存儲到指定的個人倉庫中l(wèi) Maven默認倉庫下載地

4、址在: maven的lib目錄下maven-model-builder-3.0.4.jar的pom.xml中1.2. 第一個Maven演示1.2.1. 創(chuàng)建目錄結構Convention Over Configuration (約定優(yōu)于配置)。在現(xiàn)實生活中,有很多常識性的東西,地球人都知道。比如說:如何過馬路(紅燈停綠燈行),如何開門,關門等。對于這些事情,人們已經(jīng)有了默認的約定, 在軟件開發(fā)過程中,道理也是類似的,如果我們事先約定好所有項目的目錄結構,標準開發(fā)過程(編譯,測試) , 所有人都遵循這個約定。軟件項目的管理就會變得簡單很多。在現(xiàn)在流行的很多框架中,都使用了這個概念Hello -sr

5、c -main -java -用來存放Java文件 -resources -用來存放資源文件 -test -java -用來存放測試的Java文件 -resources -target -項目輸出位置,編譯完畢后自動生成 -pom.xml1.2.2. 建立pom.xml<project xmlns="/POM/4.0.0" xmlns:xsi="/2001/XMLSchema-instance" xsi:schemaLocation="http:/maven.ap

6、/POM/4.0.0 /xsd/maven-4.0.0.xsd"> <!- 當前pom的版本號 -> <modelVersion>4.0.0</modelVersion> <!- groupId: 當前jar所屬的命名空間 -> <groupId>cn.itcast.maven</groupId> <!- 當前項目模塊名稱 -> <artifactId>Hello</artifactId> <!- 當前項目

7、的版本, SNAPSHOT鏡像版 -> <version>0.0.1-SNAPSHOT</version><!- 當前模塊需要依賴的相關jar包,也稱為依賴管理, 所有被依賴的包都是通過"坐標"定位的 -><dependencies> <!- 需要依賴junit 通過 groupId+artifactId+version來查找,如果本地沒有則到中央倉庫下載 -><dependency><!- 當前jar所屬的命名空間 -><groupId>junit</groupId

8、><!- 依賴的項目模塊的名稱 -><artifactId>junit</artifactId><!- 依賴的版本號 -><version>4.9</version><!- 依賴的范圍, 有 test compile privlege -><scope>test</scope></dependency></dependencies></project>pom.xml 文件是maven對一個項目的核心配置,這個文件將包含你希望如何構建項目的大多數(shù)配

9、置信息。POM大而復雜,但你不用全部去了解,只要使用一些常用的配置就可以了1.2.3. 創(chuàng)建Java類與測試類l 在src/main/java/cn/itcast/maven目錄下新建文件Hello.javapackage cn.itcast.maven;public class Hello public String sayHello(String name)return "Hello "+name+"!"l 在/src/test/java/cn/itcast/maven目錄下新建測試文件HelloTest.javapackage cn.itcast.

10、maven;import org.junit.Test;import static junit.framework.Assert.*;public class HelloTest Testpublic void testHello()Hello hello = new Hello();String results = hello.sayHello("litingwei");assertEquals("Hello litingwei!",results);1.2.4. 命令測試打開cmd命令行, 進入Hello項目根目錄執(zhí)行mvn compile命令, 查

11、看根目錄變化cmd 中繼續(xù)錄入mvn clean命令,然后再次查看根目錄變化cmd 中錄入 mvn clean compile命令, 查看根目錄變化cmd 中錄入 mvn clean test命令,查看根目錄變化cmd 中錄入 mvn clean package命令,查看根目錄變化1.3. Maven核心概念1.3.1. Maven插件Maven的核心僅僅定義了抽象的生命周期,具體的任務都是交由插件完成的每個插件都能實現(xiàn)多個功能,每個功能就是一個插件目標Maven的生命周期與插件目標相互綁定,以完成某個具體的構建任務, Maven的插件在: .m2repositoryorgapachemave

12、nplugins1.3.2. Maven坐標類似在平面幾何中坐標(x,y)可以標識平面中唯一的一點, Maven世界擁有大量構建,我們需要找一個用來唯一標識一個構建的統(tǒng)一規(guī)范擁有了統(tǒng)一規(guī)范,就可以把查找工作交給機器l groupId:定義當前Maven項目隸屬項目 (實際對應JAVA的包的結構, 是main目錄里java的目錄結構)l artifactId:定義實際項目中的一個模塊(項目的唯一的標識符,實際對應項目的名稱,就是項目根目錄的名稱)l version:定義當前項目的當前版本1.3.3. Maven倉庫l 何為Maven倉庫:用來統(tǒng)一存儲所有Maven共享構建的位置就是倉庫l Mav

13、en配置jar包的路徑為:groupId/artifactId/version/artifactId-versionl 本地倉庫(/.m2/repository/):每個用戶只有一個本地倉庫l 中央倉庫(Maven默認的遠程倉庫):Maven默認的遠程倉庫下載地址為:/maven2l 私服:是一種特殊的遠程倉庫, 它是架設在局域網(wǎng)內的倉庫, 主要是為了團隊協(xié)作開發(fā)l 鏡像:用來替代中央倉庫, 速度一般比中央倉庫快1.3.4. 生命周期1.4. 第二個Maven演示1.4.1. HelloFriend目錄結構HelloFriend -src -main

14、-java -resources -test -java -resources -pom.xml1.4.2. 建立Pom.xml<project xmlns="/POM/4.0.0" xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/POM/4.0.0 /xsd/maven-4.0.0.xsd">&

15、lt;modelVersion>4.0.0</modelVersion><groupId>cn.itcast.maven</groupId><artifactId>HelloFriend</artifactId><version>1.0.0</version><packaging>jar</packaging><dependencies><dependency><groupId>junit</groupId><artifactI

16、d>junit</artifactId><version>4.9</version><scope>test</scope></dependency><dependency><groupId>cn.itcast.maven</groupId><artifactId>Hello</artifactId><version>1.0.0</version><scope>compile</scope></depend

17、ency></dependencies></project>1.4.3. 創(chuàng)建Java類與測試類l 在src/main/java/cn/itcast/maven目錄下新建文件HelloFriend.javapackage cn.itcast.maven;public class HelloFriendpublic String sayHello(String name)return "Hello "+name+"!"l 在/src/test/java/cn/itcast/maven目錄下新建測試文件HelloFriendTe

18、st.javapackage cn.itcast.maven;import org.junit.Test;import cn.itcast.maven.Hello;public class HelloFriendTest Testpublic void tesHelloFriend()HelloFriend helloFriend = new HelloFriend();String results = helloFriend.sayHelloToFriend("litingwei");System.out.println(results);1.4.4. 命令測試l 在He

19、lloFriend目錄下執(zhí)行 mvn clean mvn compile mvn test 都正常l 在HelloFriend目錄下執(zhí)行命令mvn package 系統(tǒng)報錯說沒有找到依賴, 因為HelloFriend依賴Hello模塊,但是此模塊在個人倉庫和中央倉庫中并不存在l 需要重新構建Hello第一個項目并安裝到數(shù)據(jù)倉庫, 在Hello根目錄下執(zhí)行mvn clean install, 就會部署的中央倉庫中1.5. Maven與Eclipse整合1.5.1. 配置maven插件1.5.2. user settings1.6. Maven部署到Tomcat中1.6.1. 創(chuàng)建Java項目l

20、在MyEclipse創(chuàng)建項目的時候選擇Maven Projectl 在構件向導的時候選擇quickstart注意, 此向導也是插件,第一次使用的時候.也要從遠程倉庫中下載相應的jar包, 因此需要網(wǎng)絡環(huán)境l 設置當前模塊的坐標,和相應的版本號l 創(chuàng)建完畢后默認生成的項目包目錄如下l 通過在pom.xml中配置相應Hello.jar即可<project xmlns="/POM/4.0.0" xmlns:xsi="/2001/XMLSchema-instance" xsi:sc

21、hemaLocation="/POM/4.0.0 /xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <!- 定義了自己的坐標 -> <groupId>Hello3</groupId> <artifactId>Hello3</artifactId> <version>0.0.1-SNAPSHOT</version>

22、; <packaging>jar</packaging> <!- 當前Maven模塊的相關信息,可選信息 -> <name>Hello3</name> <url></url> <!- 設置常量, 下面可以通過$project.build.sourceEncoding來引用,一般來說版本號設置在此處 -> <properties><project.build.sourceEncoding>UTF-8</project.build

23、.sourceEncoding> </properties> <!- 依賴管理 -> <dependencies> <!- 依賴Junit-> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.9</version> <scope>test</scope> </dependency> <!- 依賴前面的Hel

24、lo, 那么在倉庫中必須擁有 Hello的坐標 -> <dependency> <groupId>cn.itcast.maven</groupId> <artifactId>Hello</artifactId> <version>0.0.1-SNAPSHOT</version> <scope>compile</scope> </dependency> </dependencies></project>l 通過在pom.xml中單擊右鍵選擇相應的命

25、令即可1.6.2. 創(chuàng)建Web項目l 選擇創(chuàng)建一個普通的web工程l 設置相應的坐標l 如果采用src缺省的包結構,則pom.xm中需要指定編譯和調試的目錄. <project xmlns="/POM/4.0.0" xmlns:xsi="/2001/XMLSchema-instance" xsi:schemaLocation="/POM/4.0.0 /xsd/maven-4.0

26、.0.xsd"> <modelVersion>4.0.0</modelVersion> <!- 定義自身的坐標 -> <groupId>web</groupId> <artifactId>web</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging> <!- 配置常量 -> <properties> <project.build

27、.sourceEncoding>UTF-8</project.build.sourceEncoding> <jstl.version>1.2</jstl.version> <compiler.version>1.6</compiler.version> </properties> <!- 定義依賴管理 -> <dependencies> <!- 定義需要依賴的系統(tǒng)jar, provided則在打包的時候不會包含 -> <dependency> <groupId&g

28、t;javax.servlet</groupId> <artifactId>jstl</artifactId> <version>$jstl.version</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> <version&

29、gt;2.1</version> <scope>provided</scope> </dependency> <!- 定義依賴的第三方包,compile 則打包的時候會自動加載到lib目錄中 -> <dependency> <groupId>cn.itcast.maven</groupId> <artifactId>Hello</artifactId> <version>0.0.1-SNAPSHOT</version> <scope>com

30、pile</scope> </dependency> </dependencies> <!- 用來定義構建階段的標簽 -> <build> <!- 由于采用的非Maven的約定,則在構建的時候要指定的目錄 -> <sourceDirectory>$basedir/src</sourceDirectory> <outputDirectory>$basedir/WebRoot/WEB-INF/classes</outputDirectory> <resources>

31、<!- 資源文件也存放到src中但排除 *.java -> <resource> <directory>$basedir/src</directory> <excludes> <exclude>*/*.java</exclude> </excludes> </resource> </resources> <plugins> <!- 配置相應的打包插件 -> <plugin> <artifactId>maven-war-plugi

32、n</artifactId> <configuration> <webappDirectory>$basedir/WebRoot</webappDirectory> <warSourceDirectory>$basedir/WebRoot</warSourceDirectory> </configuration> </plugin> <plugin> <artifactId>maven-compiler-plugin</artifactId> <config

33、uration> <source>$compiler.version</source> <target>$compiler.version</target> </configuration> </plugin> </plugins> </build></project>l 在index.jsp頁面中添加如下代碼<body> <% / 要導入相應: cn.itcast.maven.* Hello hello=new Hello(); out.println(hell

34、o.sayHello("admin"); %></body>1.7. Maven私服1.7.1. 關于中央倉庫注意事項l 地址: 目前來說: /maven2/是真正的Maven中央倉庫的地址,該地址內置在Maven的源碼中其他的都是鏡像l 索引: 中央倉庫帶有索引文件以方便用戶對其進行搜索,完整的索引文件大小約為60M,索引每周更新一次l 黑名單: 如果某個IP地址惡意的下載中央倉庫內容,例如全公司100臺機器使用同一個IP反復下載,這個IP(甚至是IP段)會進入黑名單,因此稍有規(guī)模的使用Maven時,應該用Nex

35、us架設私服1.7.2. 為什么需要私服為什么要搭建nexus私服,原因很簡單,有些公司都不提供外網(wǎng)給項目組人員,因此就不能使用maven訪問遠程的倉庫地址,所以很有必要在局域網(wǎng)里找一臺有外網(wǎng)權限的機器,搭建nexus私服,然后開發(fā)人員連到這臺私服上,這樣的話就可以通過這臺搭建了nexus私服的電腦訪問maven的遠程倉庫1.7.3. Nexus環(huán)境搭建第一步:下載nexus-webapp-.war包,然后拷貝到tomcat下的webapps目錄中第二步:啟動tomcat 默認登錄賬戶密碼為: admin admin123第三步:訪問http:/localhost:8080/項目

36、名稱/1.7.4. 認識repositoryNexus倉庫的默認的地址, nexus-2.1.2WEB-INFperties 中定義的在Views/Repositories->Repositories里進行配置, nexus里可以配置3種類型的倉庫,分別是proxy、hosted、group proxy:是遠程倉庫的代理。比如說在nexus中配置了一個central repository的proxy,當用戶向這個proxy請求一個artifact,這個proxy就會先在本地查找,如果找不到的話,就會從遠程倉庫下載,然后返回給用戶,相當于起到一個中轉的作用Hosted:

37、是宿主倉庫,用戶可以把自己的一些構件,deploy到hosted中,也可以手工上傳構件到hosted里。比如說oracle的驅動程序,ojdbc6.jar,在central repository是獲取不到的,就需要手工上傳到hosted里 Group:是倉庫組,在maven里沒有這個概念,是nexus特有的。目的是將上述多個倉庫聚合,對用戶暴露統(tǒng)一的地址,這樣用戶就不需要在pom中配置多個地址,只要統(tǒng)一配置group的地址就可以了右邊那個Repository Path可以點擊進去,看到倉庫中artifact列表。不過要注意瀏覽器緩存。我今天就發(fā)現(xiàn),明明構件已經(jīng)更新了,在瀏覽器里卻看不到,還以為

38、是BUG,其實是被瀏覽器緩存了virtual:也是中央倉庫鏡像,支持M1老版本1.7.5. 每個倉庫的作用3rd party: 無法從公共倉庫獲得的第三方發(fā)布版本的構件倉庫Apache Snapshots: 用了代理ApacheMaven倉庫快照版本的構件倉庫Central: 用來代理maven中央倉庫中發(fā)布版本構件的倉庫Central M1 shadow: 用于提供中央倉庫中M1格式的發(fā)布版本的構件鏡像倉庫Codehaus Snapshots: 用來代理CodehausMaven 倉庫的快照版本構件的倉庫Releases: 用來部署管理內部的發(fā)布版本構件的宿主類型倉庫Snapshots:用來

39、部署管理內部的快照版本構件的宿主類型倉庫1.7.6. Central Repository最關鍵的一個配置, 就是Central Repository的proxy配置,因為大部分的構件,都是要通過這個proxy得到的, 1.7.7. 配置Hosted Repository一般會配置3個hosted repository, 分別是3rd party、Snapshots、Releases,分別用來保存第三方jar(典型的比如ojdbc6.jar),項目組內部的快照、項目組內部的發(fā)布版, 這里并沒有什么特別的配置,只是Deployment Policy這個選項,一般Snapshots會配置成允許,而

40、Releases和3rd party會設置為禁止 1.7.8. 配置group repository前面說過group其實是一個虛擬的倉庫, 通過對實體倉庫(proxy、hosted)進行聚合, 對外暴露一個統(tǒng)一的地址這里要注意的是,放到左邊的倉庫,才是會被聚合的倉庫1.7.9. 從私服中下載資源l 可以在支持Maven的項目中進行如下配置<repositories> <repository> <id>shop</id> <name>倉庫介紹</name> <url>http:/localhost:8080/n

41、exus-2.1.2/content/groups/public/</url> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>plugin</id> <name>插件下載地址</name> <url>http:/localhost:8080/nexus-2.1.2/content/groups/public/</url> </pluginRepository

42、> </pluginRepositories>l 也可以把地址配置在setting.xml的<profiles>標簽中這樣對所有項目都生效<profiles> <repositories><repository><id>shop</id><name>倉庫介紹</name><url>http:/localhost:8080/nexus-2.1.2/content/groups/public/</url></repository></repositories><pluginRepositories> <pluginRepository> <id>plugin</id> <name>插件下載地址</name><url>http:/localhost:8080/nexus-2.1.2/content/groups/public/</url> </pluginRepository></pluginRepositories> </profiles>l 把本地項目提交到私服中<dis

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論