Maven 學習總結

Maven 簡介

Maven是什么?

Maven 這個詞可以翻譯為“知識的積累”,也可以翻譯為“專家”或“內涵”。本文將介紹maven這一跨平臺的項目管理使用工具。做為apache組織中一個頗為成功的開源項目,maven主要服務于基于java平臺的項目構建,依賴管理和項目信息管理,無論是小型的開源類庫項目,還是大型的企業級應用;無論是傳統的瀑布式開發,還是流行的敏捷模式,Maven都能大顯身手
-- maven實戰

何為構建

除了編寫源代碼,我們每天有相當一部分時間花在了編譯、運行單元測試、生成文檔、打包和部署等煩瑣且不起眼的工作上,這就是構建
如果我們現在還手工這樣做,那成本也太高了,于是有人用軟件的方法讓這一系列工作完全自動化,使得軟件的構建可以像全自動流水線一樣,只需要一條簡單的命令,所有煩瑣的步驟都能夠自動完成,很快就能得到最終結果

maven不僅僅是構建工具

依賴管理

與ant的區別

我看到很多項目的ant腳本中的命名基本上都是一致的,比如:編譯一般叫build或者compile;打包一般叫jar或war;生成文檔一般命名為 javadoc或javadocs;但其實最常用的就2,3個:比如javac javadoc jar等。

這是因為Ant所提供的可重用的****task****粒度太小,雖然靈活性很強,但是我們需要糾纏很多細節的東西
ANT是沒有依賴管理的,而對于Maven用戶來說,依賴管理是理所當然的,Maven不僅內置了依賴管理,更有一個可能擁有全世界最多Java開源軟件包的中央倉庫,Maven用戶無須進行任何配置就可以直接享用。

Maven的優點:

1.擁有約定,知道你的代碼在哪里,放到哪里去
2.擁有一個生命周期,例如執行 mvn install就可以自動執行編譯,測試,打包等構建過程
3.只需要定義一個pom.xml,然后把源碼放到默認的目錄,Maven幫你處理其他事情
4.擁有依賴管理,倉庫管理

Maven 的安裝配置

首先官網下載 http://maven.apache.org/download.cgi

Paste_Image.png

說明需要JDK 1.7及以上,這里我們使用JDK1.8

這里我下載的是maven 3.3.9

1.將安裝文件解壓到指定的目錄中,如:

D:\maven\apache-maven-3.3.9

2.設置環境變量

將D:\maven\apache-maven-3.3.9\bin 設進環境變量中

打開cmd 執行

mvn -v

Paste_Image.png

注意事項

設置MAVEN_OPTS環境變量,通常需要設置MAVEN_OPTS的值為-Xms128m-Xmx512m,因為Java默認的最大可用內存往往不能夠滿足Maven運行的需要,比如在項目較大時,使用Maven生成項目站點需要占用大量的內存,如果沒有該配置,則很容易得到java.lang.OutOfMemeoryError。因此,一開始就配置該變量是推薦的做法。

Paste_Image.png

maven使用入門

一、編寫pom文件
就像Make的Makefile、Ant的build.xml一樣,Maven項目的核心是pom.xml。POM(Project Object Model,項目對象模型)定義了項目的基本信息,用于描述項目如何構建,聲明項目依賴,等等。現在先為Hello World項目編寫一個最簡單的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.pikaq</groupId>
  <artifactId>maventest</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>
  <name>maventest</name>
</project>

這段代碼中最重要的是包含groupId、artifactId和version的三行。這三個元素定義了一個項目基本的坐標,在Maven的世界,任何的jar、pom或者war都是以基于這些基本的坐標進行區分的。
groupId定義了項目屬于哪個組,這個組往往和項目所在的組織或公司存在關聯。譬如在googlecode上建立了一個名為myapp的項目,那么groupId就應該是com.googlecode.myapp,如果你的公司是mycom,有一個項目為myapp,那么groupId就應該是com.mycom.myapp。本書中所有的代碼都基于groupId com.juvenxu.mvnbook。
本書其他章節代碼會分配其他的artifactId。而在前面的groupId為com.googlecode.myapp的例子中,你可能會為不同的子項目(模塊)分配artifactId,如myapp-util、myapp-domain、myapp-web等
顧名思義,version指定了Hello World項目當前的版本——1.0-SNAPSHOT。SNAPSHOT意為快照,說明該項目還處于開發中,是不穩定的版本。隨著項目的發展,version會不斷更新,如升級為1.0、1.1-SNAPSHOT、1.1、2.0等。6.5節會詳細介紹SNAPSHOT,第13章會介紹如何使用Maven管理項目版本的升級發布。
最后一個name元素聲明了一個對于用戶更為友好的項目名稱,雖然這不是必須的,但還是推薦為每個POM聲明name,以方便信息交流。

編寫主代碼

package com.pikaq.maventest;

public class Helloworld{
    public String sayHello(){
        return "hello";
    }
    
    public static void main(String [] args){
        System.out.println(new Helloworld().sayHello());
    }
    
}

這里需要注意,在大多數情況下,我們應該遵循maven約定把代碼放在src/main/java 目錄下,無需其他配置,maven就會自動去搜尋主代碼,代碼編寫完之后,使用

mvn clean compile 編譯

Paste_Image.png

編寫測試代碼

和編寫主代碼類似,測試代碼的目錄對應的應該在 src/test/java 下,因此應該先創建目錄,
修改項目 pom 文件,增加Junit依賴

<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.pikaq</groupId>
  <artifactId>maventest</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>maventest</name>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.7</version>
      <scope>test</scope>
    </dependency>
 </dependencies>
  
</project>

編寫測試類

package com.pikaq.maventest;
import static org.junit.Assert.assertEquals;
import org.junit.Test;

public class HelloworldTest{
    
    @Test
    public void testSayHello(){
        Helloworld h = new Helloworld();
        String result = h.sayHello();
        assertEquals("hello",result);
    }
    
}

運行 mvn clean test

Paste_Image.png

打包和運行

mvn clean package

Paste_Image.png

maven 在打包之前執行了編譯和測試操作

但是如何讓其他maven 項目引用這個jar包呢:

mvn clean install

通過執行install 命令將jar 安裝到了本地倉庫中

使用Archetype 生成項目骨架

前面我們只是為了我們進一步熟悉maven,真正用的時候我們當然不會這么復雜,一個一個目錄的去創建,這顯然是重復勞動!我們只需要一個簡單的命令就能生成我們約定好的項目骨架!

mvn archetype:generate

注意這里極有可能會卡主,因為這個命令會默認去遠程請求所有的骨架

所以我們這里可以選擇 >mvn archetype:generate -DarchetypeCatalog=internal

這個命令執行只會列出常用的10個
我們只需要按照提示選擇一個即可,并依次輸入groupID等

Paste_Image.png

提示創建成功,我們發現已經生成了一個maven項目,是不是非常簡單!

maven 的依賴管理問題

image.png

maven會自動選擇路徑最短的

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,362評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,577評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,486評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,852評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,600評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,944評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,944評論 3 447
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,108評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,652評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,385評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,616評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,111評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,798評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,205評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,537評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,334評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,570評論 2 379

推薦閱讀更多精彩內容