Apache Maven 3.5.0配置安裝
2、下載瞭解壓到
3、配置環境變數
4、測試看是否安裝成功
5、maven配置(全域性配置,使用者配置)
3.1、全域性配置
在maven安裝目錄的conf裡面有一個settings.xml檔案,這個檔案就是maven的全域性配置檔案。
該檔案中配置來maven本地倉庫的地址
預設在系統的使用者目錄下的m2/repository中,該目錄是本地倉庫的目錄。
5.2、使用者配置
使用者配置檔案的地址:~/.m2/settings.xml,該檔案預設是沒有,需要將全域性配置檔案拷貝一份到該目錄下。
重新指定本地倉庫地址,如果不指定,則預設是~/.m2/repository目錄,如果使用者配置檔案不存在,則使用全域性配置檔案的配置。
一、Maven常用命令
1.1、Maven 引數
-D 傳入屬性引數
-P 使用pom中指定的配置
-e 顯示maven執行出錯的資訊
-o 離線執行命令,即不去遠端倉庫更新包
-X 顯示maven允許的debug資訊
-U 強制去遠端參考更新snapshot包
例如 mvn install -Dmaven.test.skip=true -Poracle
其他引數可以通過mvn help 獲取
1.2、maven常用命令
1、mvn clean
說明: 清理專案生產的臨時檔案,一般是模組下的target目錄
2、mvn package
說明: 專案打包工具,會在模組下的target目錄生成jar或war等檔案,如下執行結果。
生成的檔案 如下:
3、mvn test
說明: 測試命令,或執行src/test/java/下junit的測試用例.
4、mvn install
說明: 模組安裝命令 將打包的的jar/war檔案複製到你的本地倉庫中,供其他模組使用 -Dmaven.test.skip=true 跳過測試(同時會跳過test compile)
5、mvn deploy
說明: 釋出命令 將打包的檔案釋出到遠端參考,提供其他人員進行下載依賴 ,一般是釋出到公司的私服,這裡我沒配置私服,所以就不演示了。
三、POM檔案講解
POM全稱是Project Object Model,即專案物件模型。pom.xml是maven的專案描述檔案,它類似與antx的project.xml檔案。pom.xml檔案以xml的 形式描述專案的資訊,包括專案名稱、版本、專案id、專案的依賴關係、編譯環境、持續整合、專案團隊、貢獻管理、生成報表等等。總之,它包含了所有的專案 資訊。
3.2.1. 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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <groupId>com.lin.learning</groupId>
- <artifactId>maven-hellowrold</artifactId>
- <version>0.0.1-SNAPSHOT</version>
- <packaging>jar</packaging>
- <name>maven-hellowrold</name>
- <url>http://maven.apache.org</url>
- <properties>
- <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
- </properties>
- </project>
modelVersion 描述這個POM檔案是遵從哪個版本的專案描述符。
groupId 針對一個專案的普遍唯一識別符。通常用一個完全正確的包的名字來與其他專案的類似名字來進行區分(比如:org.apache.maven)。
artifactId 在給定groupID 的group裡面為artifact 指定的識別符號是唯一的 , artifact 代表的是被製作或者被一個project應用的元件(產出物)。
version 當前專案產生的artifact的版本以上4個元素缺一不可,其中groupId, artifactId, version描述依賴的專案唯一標誌。
1. pom.xml檔案結構
- <project>
- <modelVersion>4.0.0</modelVersion>
- <!- The Basics 專案的基本資訊->
- <groupId>...</groupId>
- <artifactId>...</artifactId>
- <version>...</version>
- <packaging>...</packaging>
- <dependencies>...</dependencies>
- <parent>...</parent>
- <dependencyManagement>...</dependencyManagement>
- <modules>...</modules>
- <properties>...</properties>
- <!- Build Settings 專案的編譯設定->
- <build>...</build>
- <reporting>...</reporting>
- <!- More Project Information 其它專案資訊 ->
- <name>...</name>
- <description>...</description>
- <url>...</url>
- <inceptionYear>...</inceptionYear>
- <licenses>...</licenses>
- <organization>...</organization>
- <developers>...</developers>
- <contributors>...</contributors>
- <!-- Environment Settings ->
- <issueManagement>...</issueManagement>
- <ciManagement>...</ciManagement>
- <mailingLists>...</mailingLists>
- <scm>...</scm>
- <prerequisites>...</prerequisites>
- <repositories>...</repositories>
- <pluginRepositories>...</pluginRepositories>
- <distributionManagement>...</distributionManagement>
- <profiles>...</profiles>
- </project>
project是pom.xml的根節點,至於其它元素請參考POM Reference
2.、POM很重要的3個關係
POM有3個很重要的關係:依賴、繼承、合成。
2.1. 依賴關係
- <dependencies>
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>4.0</version>
- <type>jar</type>
- <scope>test</scope>
- <optional>true</optional>
- </dependency>
- ...
- </dependencies>
如果想依賴一個maven庫中沒有的一個jar包,方法很簡單,就是先將此jar包使用以下的命令安裝到本地maven庫中:
mvn install:install-file -Dfile=my.jar -DgroupId=mygroup -DartifactId=myartifactId -Dversion=1
再把依賴關係加進去即可。
2.2. 繼承關係
另一個強大的變化, maven帶來的是專案繼承。
2.2.1. 定義父專案
- <project>
- <modelVersion>4.0.0</modelVersion>
- <groupId>com.mygroup </groupId>
- <artifactId>my-parent</artifactId>
- <version>2.0</version>
- <packaging>pom</packaging>
- </project>
packaging 型別,定義值為 pom用於定義為parent和合成多個專案。 當然我們建立的maven專案的pom都繼承maven的super pom, 如果想看專案(父或子)的完全的pom結構,可以執行:
mvn help:effective-pom
3、maven-eclipse-plugin外掛
1、mvn eclipse:eclipse
說明: 生成eclipse配置檔案,匯入到eclipse開放,如果是使用m2eclipse外掛,則可以不用次命令.直接使用外掛匯入到eclipse進行開放
注:通過次命令生產的專案,需要在eclipse中配置M2_HOME的命令,指向你的本地倉庫資料夾.
來看看生成的結果:。classpath就是位元組碼
2、mvn eclipse:m2eclipse
生成eclipse配置檔案,該配置檔案需依賴eclipse 中有m2eclipse
-DdownloadSources=true 下載依賴包的原始碼檔案
-Declipse.addVersionToProjectName=true 新增版本資訊到專案名稱中
3、mvn eclipse:clean
清除eclipse的專案檔案
看看檔案內容,沒有project檔案 了
4、maven-jetty-plugin外掛
1、mvn jetty:run
說明: 可以直接用jetty的伺服器執行 注:此命令只適用於war的模組,即web模組.
2、mvn archetype:generate
說明: 模組建立命令, 執行命令後,會提示選擇建立專案的模版,這裡選18(maven-archetype-quickstart)
後面會提示你輸入groupId(包存放的路徑):
eg:com.lin
提示輸入artifactId(模組名稱):
eg:test-core
提示輸入version(版本):
1.0.0-SNAPSHOT
提示輸入package(指專案中基本的包路徑):
eg:com.lin
提示確認,回車即可
5、maven-release-plugin外掛
說明: 發行版本,可與scm工具整合,來提供版本管理.不等同與版本控制.允許是必須有goal.兩個常用的goal如下:
1、mvn release:clean
清理release操作是遺留下來的檔案
2、mvn release:branch
說明: 建立分支,會在分支下建立執行的分支路徑
-DbranchName=xxxx-100317 分支中的名稱
-DupdateBranchVersions=false 是否更新分支的版本資訊,預設為false
-DupdateWorkingCopyVersions=false 是否更新主幹的版本資訊,預設為true
3、mvn release:prepare
建立標記,會有互動過程,提示tag中pom的版本及trunk下的新版本號,每個模組都會詢問,預設是最小版本號+1
-Dtag = 4.4.0 將在tags建立該名稱資料夾
-DdryRun=true 檢查各項設定是否正確,可做測試用,會產生一些修改的配置檔案資訊.
命令:
mvn release:perform
次命令會自動幫我們簽出剛才打的tag,然後打包,分發到遠端Maven倉庫中
6、Maven站點報表
1、mvn project-info-reports:dependencies
生成專案依賴的報表
2、mvn dependency:resolve
檢視依賴
檢視專案依賴情況
3、mvn dependency:tree
打印出專案的整個依賴樹
4、mvn dependency:analyze
幫助你分析依賴關係, 用來取出無用, 重複依賴的好幫手
5、mvn install -X
追蹤依賴的完整軌跡
6、生命週期
resource->compile->process-classes->process-test-resources->test-compile->test->prepare-package->package
resources:resources 繫結在resource處理階段, 用來將src/main/resources下或者任何指定其他目錄下的檔案copy到輸出目錄中
resources:testResources 將test下的resources目錄或者任何指定其他目錄copy到test輸出目錄下
compiler:testCompile 將測試類編譯(包括copy資原始檔)
surefire:test 執行測試用例
jar:jar 打jar包
二、各種範圍
compile(編譯範圍)
compile是預設的範圍;如果沒有提供一個範圍,那該依賴的範圍就是編譯範圍。編譯範圍依賴在所有的classpath中可用,同時它們也會被打包。
provided(已提供範圍)
provided依賴只有在當JDK或者一個容器已提供該依賴之後才使用。例如,如果你開發了一個web應用,你可能在編譯classpath中需要可用的Servlet API來編譯一個servlet,但是你不會想要在打包好的WAR中包含這個Servlet API;這個Servlet API JAR由你的應用伺服器或者servlet容器提供。已提供範圍的依賴在編譯classpath(不是執行時)可用。它們不是傳遞性的,也不會被打包。
runtime(執行時範圍)
runtime依賴在執行和測試系統的時候需要,但在編譯的時候不需要。比如,你可能在編譯的時候只需要JDBC API JAR,而只有在執行的時候才需要JDBC驅動實現。
test(測試範圍)
test範圍依賴 在一般的 編譯和執行時都不需要,它們只有在測試編譯和測試執行階段可用。
system(系統範圍)
system範圍依賴與provided類似,但是你必須顯式的提供一個對於本地系統中JAR檔案的路徑。這麼做是為了允許基於本地物件編譯,而這些物件是系統類庫的一部分。這樣的構件應該是一直可用的,Maven也不會在倉庫中去尋找它。。如果你將一個依賴範圍設定成系統範圍,你必須同時提供一個systemPath元素。注意該範圍是不推薦使用的(你應該一直儘量去從公共或定製的Maven倉庫中引用依賴)。