一、Maven簡介
Maven 是一個項目管理工具,可以對 Java 項目進行構建、依賴管理,是一個自動化構建工具。
自動化構建工具:將原材料(java、js、css、html....)->產品(可發布項目)
編譯-打包-部署-測試 -> 自動構建
Maven的作用:
1、管理jar包
- 增加第三方jar包(不需要自己下載jar包)
- 管理jar包之間的依賴關系(maven自動關聯下載所有依賴的jar包)
2、將項目拆分成若干個模塊:借助於Maven可以將一個項目拆分成多個工程。(例如愛洋蔥)
Maven能干的事情:
清理:刪除編譯的結果,為重新編譯做准備。
編譯:java->class
測試:針對於項目中的關鍵點進行測試,也可用項目中的測試代碼去測試開發代碼
報告:將測試結果進行顯示
打包:將項目中包含的多個文件壓縮成一個文件,用於安裝或部署(java項目打成一個jar包,web項目打成一個war包,父工程-pom)
安裝:將打成的包,放到本地倉庫,供其他項目使用。
部署:將打成的包,放到服務器上,准備運行。
Eclipse中的項目,要在Tomcat中運行,需要部署:
a、通過eclipse中add and remove按鈕進行部署
b、將Web項目打成一個war包,然后將該war包復制到Tomcat/webapps中即可
通常下載一個jar包,先在本地倉庫中下載,如果本地倉庫中不存在,則再聯網到中央倉庫(鏡像)去下載。
約定配置:
Maven 提倡使用一個共同的標准目錄結構,Maven 使用約定優於配置的原則,大家盡可能的遵守這樣的目錄結構。如下所示:
二、Maven POM
POM(項目對象模型) 是 Maven 工程的基本工作單元,是一個XML文件,包含了項目的基本信息,用於描述項目如何構建,聲明項目依賴,等等。執行任務或目標時,Maven 會在當前目錄中查找 POM。它讀取 POM,獲取所需的配置信息,然后執行目標。POM 中可以指定以下配置:
項目依賴
插件
執行目標
項目構建profile
項目版本
項目開發者列表
相關郵件列表信息
在創建 POM 之前,我們首先需要描述項目組 (groupId), 項目的唯一ID。
所有 POM 文件都需要 project 元素和三個必需字段:groupId,artifactId,version。
通過groupId,artifactId,version可以在本地倉庫唯一標識一個模塊。
三、依賴
A中的某些類,需要使用B中的某些類,則稱為A依賴B
在maven項目中,如果要使用一個當時不存在的jar或模塊,則可以通過依賴實現(去本地倉庫、遠程倉庫去尋找)
1、依賴的范圍、依賴的有效性:
Compile(默認) test provided
2、依賴排除
3、依賴的傳遞性
A.jar->B.jar->C.jar
要使A.jar->C.jar:當且僅當 B.jar依賴於C.jar的范圍是compile
多個maven項目(模塊)之間如何依賴:p項目<-q項目
- p項目install到本地倉庫
- q項目依賴,在pom.xml中放入p項目的坐標:
1 <dependency> 2 3 <groupId>aa.test</groupId> 4 5 <artifactId>HelloWorld</artifactId> 6 7 <version>0.0.1-SNAPSHOT</version> 8 9 </dependency>
4、依賴原則
a、最短路徑優先原則
b、路徑長度相同:
i、在同一個pom.xml文件中有2個相同的依賴,則后面的依賴會覆蓋前面的 依賴(嚴禁使用本情況)
ii、如果是不同的pom.xml中有2個相同的依賴,則先聲明的依賴會覆蓋后 聲明的依賴
改eclipse中jdk的版本:
在maven的安裝目錄中,打開setting.xml,在<profiles>節點下,加入以下代碼:
1 <profile> 2 3 <id>jdk-1.8</id> 4 5 <activation> 6 7 <activeByDefault>true</activeByDefault> 8 9 <jdk>1.8</jdk> 10 11 </activation> 12 13 <properties> 14 15 <maven.compiler.source>1.8</maven.compiler.source> 16 17 <maven.compiler.target>1.8</maven.compiler.target> 18 19 20 <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion> 21 22 </properties> 23 24 </profile>
然后再在eclipse中創建maven工程時,jdk就是1.8的了。
改pom.xml文件中的依賴的版本:
首先在根節點中插入<properties></properties>節點,然后在這個節點里,添加類似這樣的版本號信息:
<spring.version>4.1.5.RELEASE</spring.version>
<lucene.version>3.6.2</lucene.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>(這個是文件的編碼)
然后在依賴中,寫成以下形式(類似於EL表達式):
1 <dependency> 2 3 <groupId>org.springframework</groupId> 4 5 <artifactId>spring-context</artifactId> 6 7 <version>${spring.version}</version> 8 9 </dependency>
四、命令
執行mvn命令:必須在pom.xml所在目錄執行
Maven常見命令:
mvn compile --只編譯main目錄中的java文件
mvn test 測試,運行的是test/java中的代碼
mvn package 打成 jar/war包,放在項目的target文件夾中
mvn install 將開發的模塊放入本地倉庫,供其他模塊使用(放入的位置,是通過gav決定)
mvn clean 刪除target目錄(刪除編譯文件目錄)
mvn deploy 將項目部署到Tomcat中,然后即可運行。
在eclipse中創建maven工程:
1、配置maven:
配置maven版本(不用自帶的,用自己安裝的)
配置本地倉庫:設置settings.xml
如果執行package命令,則依次執行resources、compile、test、package命令。
Maven生命周期:
生命周期中的順序:a b c d e
當我們執行c命令,則實際執行的是a b c
生命周期包含的階段:3個階段
clean 生命周期:清理
pre-clean clean post-clean
default 生命周期:默認
site 生命周期:站點
pre-site site post-site site-deploy
五、繼承
使用繼承,可以通過父工程,統一管理依賴的版本。
1、創建父工程:父工程的打包方式為pom
2、在父工程的pom.xml中編寫依賴:
1 <dependencyManagement> 2 <dependencies> 3 <dependency> 4 ...... 5 </dependency> 6 </dependencies> 7 </dependencyManagement>
3、在子工程中加入父工程的gav(寫在<parent/>標簽中)。
4、在子工程的pom.xml中寫入<relativePath>../B/pom.xml</relativePath>(子工程pom相對於父工程pom的相對路徑)
5、在子工程中需要聲明:使用父工程的哪些依賴:
<dependency>
<groupId>..</groupId>
<artifactId>..</artifactId>
</dependency>(只需要ga,不需要v了)
六、聚合
Maven2項目依賴於maven1項目,則在執行時,必須先將maven1加入到本地倉庫中(install),之后才能執行maven2。
以上前置工程(maven1)的install操作,可以交由“聚合”一次性搞定。
聚合的使用:
在一個總工程中配置聚合:(聚合的配置,只能配置在打包方式為pom的Maven工程中)
1 <!-- 配置聚合,避免前置工程的install操作 --> 2 3 <modules> 4 5 <module>../Maven1</module> 6 7 <module>../Maven2</module> 8 9 </modules>
配置完聚合之后,以后只要操作總工程,則會自動操作總工程中配置過的工程。(只要install了總工程,則子工程都會install)
七、部署
正常部署:
首先將maven的web項目打包(打成war包,結果在項目根目錄的target文件夾里),然后將war包復制到tomcat的webapps文件夾中,啟動tomcat即可運行。
Maven部署:
1、配置cargo
在pom.xml中加入以下內容:
1 <build> 2 3 <finalName>MyWebProject</finalName><!-- 工程名 --> 4 5 <plugins> 6 7 <plugin> 8 9 <groupId>org.codehaus.cargo</groupId><!-- 啟動tomcat --> 10 11 <artifactId>cargo-maven2-plugin</artifactId> 12 13 <version>1.4.9</version> 14 15 <configuration> 16 17 <container> 18 19 <containerId>tomcat8x</containerId> 20 21 <home>E:\Tomcat 9\apache-tomcat-9.0.14</home> 22 23 </container> 24 25 <configuration> 26 27 <type>existing</type> 28 29 <home>E:\Tomcat 9\apache-tomcat-9.0.14</home> 30 31 <!-- 默認8080 --> 32 33 <!-- <properties> --> 34 35 <!-- <cargo.servlet.port>8888</cargo.servlet.port> --> 36 37 <!-- </properties> --> 38 39 </configuration> 40 41 </configuration> 42 43 <executions> 44 45 <execution> 46 47 <id>cargo-run</id> 48 49 <phase>install</phase> 50 51 <goals> 52 53 <goal>run</goal> 54 55 </goals> 56 57 </execution> 58 59 </executions> 60 61 </plugin> 62 63 </plugins> 64 65 </build>
2、Maven命令:deploy
然后run as->maven build...->deploy,然后打開瀏覽器,輸入localhost:8080/項目名稱/,即可運行。