Maven簡介
Maven這個詞翻譯爲("專家","內行"),是跨平臺的項目管理工具
Maven主要服務於基於Java平臺的項目構建,依賴管理,項目信息管理。
項目構建
依賴管理
項目信息管理
Maven組成目錄
Maven項目的目錄約定
mvn命令
- mvn compile 編譯
- mvn install 編譯,運行和發佈
- mvn package 編譯 運行不負責發佈,也實用package命令不會講target內容發佈到本地倉庫
- mvn test 編譯,如果你test包下面有相關java也編譯和運行,但是也一樣不會發布到本地倉庫中
- mvn clean清除的意思
Maven自動構建Java Project項目
我們再來看最關鍵的一個項目描述文件pom.xml
,它的內容長得像下面:
<project ...>
<modelVersion>4.0.0</modelVersion>
<groupId>com.itranswarp.learnjava</groupId>
<artifactId>hello</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<properties>
...
</properties>
<dependencies>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
</dependencies>
</project>
其中,groupId
類似於Java的包名,通常是公司或組織名稱,artifactId
類似於Java的類名,通常是項目名稱,再加上version
,一個Maven工程就是由groupId
,artifactId
和version
作爲唯一標識。我們在引用其他第三方庫的時候,也是通過這3個變量確定。例如,依賴commons-logging
:
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
使用<dependency>
聲明一個依賴後,Maven就會自動下載這個依賴包並把它放到classpath中。
依賴關係
Maven定義了幾種依賴關係,分別是compile
、test
、runtime
和provided
:
scope | 說明 | 示例 |
---|---|---|
compile | 編譯時需要用到該jar包(默認) | commons-logging |
test | 編譯Test時需要用到該jar包 | junit |
runtime | 編譯時不需要,但運行時需要用到 | mysql |
provided | 編譯時需要用到,但運行時由JDK或某個服務器提供 | servlet-api |
其中,默認的compile
是最常用的,Maven會把這種類型的依賴直接放入classpath。
test
依賴表示僅在測試時使用,正常運行時並不需要。最常用的test
依賴就是JUnit:
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.3.2</version>
<scope>test</scope>
</dependency>
唯一ID
對於某個依賴,Maven只需要3個變量即可唯一確定某個jar包:
- groupId:屬於組織的名稱,類似Java的包名;
- artifactId:該jar包自身的名稱,類似Java的類名;
- version:該jar包的版本。
通過上述3個變量,即可唯一確定某個jar包。Maven通過對jar包進行PGP簽名確保任何一個jar包一經發布就無法修改。修改已發佈jar包的唯一方法是發佈一個新版本。
因此,某個jar包一旦被Maven下載過,即可永久地安全緩存在本地。
注:只有以-SNAPSHOT
結尾的版本號會被Maven視爲開發版本,開發版本每次都會重複下載,這種SNAPSHOT版本只能用於內部私有的Maven repo,公開發布的版本不允許出現SNAPSHOT。
Maven鏡像
除了可以從Maven的中央倉庫下載外,還可以從Maven的鏡像倉庫下載。如果訪問Maven的中央倉庫非常慢,我們可以選擇一個速度較快的Maven的鏡像倉庫。Maven鏡像倉庫定期從中央倉庫同步:
slow ┌───────────────────┐
┌─────────────>│Maven Central Repo.│
│ └───────────────────┘
│ │
│ │sync
│ ▼
┌───────┐ fast ┌───────────────────┐
│ User │─────────>│Maven Mirror Repo. │
└───────┘ └───────────────────┘
中國區用戶可以使用阿里雲提供的Maven鏡像倉庫。使用Maven鏡像倉庫需要一個配置,在用戶主目錄下進入.m2
目錄,創建一個settings.xml
配置文件,內容如下:
<settings>
<mirrors>
<mirror>
<id>aliyun</id>
<name>aliyun</name>
<mirrorOf>central</mirrorOf>
<!-- 國內推薦阿里雲的Maven鏡像 -->
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</mirror>
</mirrors>
</settings>
配置鏡像倉庫後,Maven的下載速度就會非常快。
搜索第三方組件
最後一個問題:如果我們要引用一個第三方組件,比如okhttp
,如何確切地獲得它的groupId
、artifactId
和version
?方法是通過search.maven.org搜索關鍵字,找到對應的組件後,直接複製:
命令行編譯
在命令中,進入到pom.xml
所在目錄,輸入以下命令:
$ mvn clean package
如果一切順利,即可在target
目錄下獲得編譯後自動打包的jar。
在IDE中使用Maven
幾乎所有的IDE都內置了對Maven的支持。在Eclipse中,可以直接創建或導入Maven項目。如果導入後的Maven項目有錯誤,可以嘗試選擇項目後點擊右鍵,選擇Maven - Update Project...更新: