使用 Maven 構(gòu)建 Java 項目

Maven 是基于項目對象模型「POM」墩虹,可以通過一小段描述信息來管理項目的構(gòu)建诫钓、報告和文檔的軟件項目管理工具惧所。本文總結(jié)了 Maven 的基本用法。

1. Maven 基本配置

1.1 環(huán)境變量

環(huán)境變量中添加「M2_HOME」為 maven 主目錄

在 path 中添加「;%M2_HOME%\bin」

1.2 使用 Maven 阿里云中央倉庫

修改 Maven 根目錄下 conf 文件夾中的 setting.xml 文件,內(nèi)容如下:

<mirrors>
  <mirror>
    <id>alimaven</id>
    <name>aliyun maven</name>
    <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
    <mirrorOf>central</mirrorOf>
  </mirror>
</mirrors>

2. 創(chuàng)建基于 Maven 的 Java 項目

2.1 使用命令行創(chuàng)建

Maven 使用原型「archetype」插件創(chuàng)建工程驰唬。要創(chuàng)建一個簡單的 Java 應(yīng)用,我們將使用 maven-archetype-quickstart 插件卷谈。

Maven 創(chuàng)建目錄有兩種方式:「archetype 可自動創(chuàng)建目錄骨架」

  • 在 cmd 中直接執(zhí)行「mvn archetype:generate」按照提示進行選擇朗兵,選擇如下 Archetype:
943: remote -> org.apache.maven.archetypes:maven-archetype-quickstart (An archetype which contains a sample Maven project.)
  • 使用單行命令創(chuàng)建項目盐欺,命令格式如下:
mvn archetype:generate 
 -DgourpId = 組織名,公司網(wǎng)址的反寫 + 項目名稱
 -DartifactId=項目名-模塊名
 -Dversion=版本號
 -Dpackage=代碼所在的包名

示例如下:

mvn archetype:generate
 -DgroupId=cc.bitky.demo
 -DartifactId=demo-module
 -Dversion=1.0.0-SNAPSHOT
 -Dpackage=cc.bitky.demo.module

2.2 使用InteliJ IDEA 創(chuàng)建

  • 在 InteliJ IDEA 中創(chuàng)建基礎(chǔ)的示例 Maven 項目柱衔,依舊選擇:
org.apache.maven.archetypes:maven-archetype-quickstart

如圖所示:

Maven Quickstart Archetype

3. 目錄結(jié)構(gòu)

3.1 Maven 項目的目錄結(jié)構(gòu)

在 Maven 項目的根目錄下,有如下必要的目錄結(jié)構(gòu):

  • src
    • main
      • resources「存放一些資源文件」
      • java
        • package「自定義的包」
    • test
      • resources「存放一些資源文件」
      • java
        • package
  • pom.xml

如下圖所示:

Maven 項目的目錄結(jié)構(gòu)

3.2 項目根目錄下「pom.xml」的典型結(jié)構(gòu):

<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>     <!-->maven版本</-->
  <groupId>cc.bitky.demo</groupId>       <!-->項目的包名</-->
  <artifactId>demo-module</artifactId>   <!-->模塊名</-->
  <version>1.0.0-SNAPSHOT</version>      <!-->版本</-->
  <packaging>jar</packaging>
  <name>demo-module</name>
  <url>http://maven.apache.org</url>
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>
  <!-- 依賴項 -->
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
      <!-- 排除依賴傳遞列表 -->
      <exclusions>
        <exclusion></exclusion>
      </exclusions>
    </dependency>
  </dependencies>
  <!-- 依賴的管理唆铐,一般定義在父模塊中哲戚,由子模塊去繼承 -->
  <dependencyManagement>
    <dependencies>
      <dependency></dependency>
    </dependencies>
  </dependencyManagement>
  <!-- 對構(gòu)建行為提供相應(yīng)的支持 -->
  <build>
    <!-- 插件列表 -->
    <plugins>
      <plugin>
        <!-- 指定坐標(biāo) -->
        <groupId></groupId>
        <artifactId></artifactId>
        <version></version>
      </plugin>
    </plugins>
  </build>
  <!-- 一般在子模塊中指定所繼承的父模塊 -->
  <parent></parent>
  <!-- 模塊列表 -->
  <modules>
    <module></module>
  </modules>
</project>

4. Maven 操作

4.1 構(gòu)建命令

  • mvn -v 版本。
  • mvn compile 編譯艾岂。
  • mvn test 測試顺少。
  • mvn package 打包。
  • mvn clean 清除maven生成的target目錄。
  • mvn install 將生成的jar安裝到本地倉庫中脆炎。
  • mvn compile: 編譯主程序源代碼梅猿,不會編譯test目錄的源代碼。第一次運行時秒裕,會下載相關(guān)的依賴包袱蚓,可能會比較費時
  • mvn test: 運行應(yīng)用程序中的單元測試,會生成 target 文件夾:
    • 主程序編譯的字節(jié)碼文件在 classes 下面
    • 測試程序放在 test-classes 下
    • 所生成的測試報告放在 surefire-reports 文件夾下
  • mvn package 會在target目錄下生成 Jar 包架谎,如「maven01-model-0.0.1SNAPSHPT.jar」

4.2 生命周期

Maven的生命周期大概如下婿失,這幾個命令對應(yīng)了一個項目的完整的構(gòu)建過程渴析,這幾個步驟對應(yīng)的都有插件來完成:

  • clean 「清理」
  • compile 「編譯」
  • test 「測試」
  • package 「打包」
  • install「安裝到本地庫」

Maven的生命周期分為三個獨立的生命周期(每一個生命周期有分為若干個階段,其中defaul是最核心的一個):

  1. clean「清理項目」
  2. default「構(gòu)建項目」
  3. site「生成項目的站點」

4.2.1 clean「清理項目」

  • pre-clean 「執(zhí)行清理前的工作」
  • clean「清理上一次構(gòu)建生成的所有文件」
  • post-clean「執(zhí)行清理后的文件」

4.2.2 default「構(gòu)建項目」(最核心)

  • compile 「編譯」
  • test 「測試」
  • package 「打包」
  • install「安裝到本地庫」

4.2.3 site「生成項目站點」

  • pre-site「在生成項目站點之前要完成的工作」
  • site「生成項目的站點文檔」
  • post-site「在生成項目站點后要完成的工作」
  • site-deploy「發(fā)布生成的站點到服務(wù)器上」

注意

  • 每個獨立的生命周期颖低,只需執(zhí)行其中一個命令,此時會從該生命周期的開始命令順序執(zhí)行到該命令弧烤。
  • Maven的生命周期對應(yīng)的命令是順序執(zhí)行的忱屑,如果沒有人為的順序的一個個執(zhí)行,那么Maven會默認的自動運行扼褪。
  • 如執(zhí)行「mvn clean test」,則此時會順序執(zhí)行「pre-clean clean post-clean compile test」
  • 如執(zhí)行「mvn test」,則此時會順序執(zhí)行「compile test」

5. 參考資料

  1. Maven 教程 - 「極客學(xué)院 Wiki」
  2. 項目管理利器 — maven「慕課網(wǎng)」
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末想幻,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子话浇,更是在濱河造成了極大的恐慌脏毯,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,907評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件幔崖,死亡現(xiàn)場離奇詭異食店,居然都是意外死亡,警方通過查閱死者的電腦和手機赏寇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評論 3 395
  • 文/潘曉璐 我一進店門吉嫩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人嗅定,你說我怎么就攤上這事自娩。” “怎么了渠退?”我有些...
    開封第一講書人閱讀 164,298評論 0 354
  • 文/不壞的土叔 我叫張陵忙迁,是天一觀的道長。 經(jīng)常有香客問我碎乃,道長姊扔,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,586評論 1 293
  • 正文 為了忘掉前任梅誓,我火速辦了婚禮恰梢,結(jié)果婚禮上佛南,老公的妹妹穿的比我還像新娘。我一直安慰自己嵌言,他們只是感情好嗅回,可當(dāng)我...
    茶點故事閱讀 67,633評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著呀页,像睡著了一般妈拌。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蓬蝶,一...
    開封第一講書人閱讀 51,488評論 1 302
  • 那天尘分,我揣著相機與錄音,去河邊找鬼丸氛。 笑死培愁,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的缓窜。 我是一名探鬼主播定续,決...
    沈念sama閱讀 40,275評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼禾锤!你這毒婦竟也來了私股?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,176評論 0 276
  • 序言:老撾萬榮一對情侶失蹤恩掷,失蹤者是張志新(化名)和其女友劉穎倡鲸,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體黄娘,經(jīng)...
    沈念sama閱讀 45,619評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡峭状,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,819評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了逼争。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片优床。...
    茶點故事閱讀 39,932評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖誓焦,靈堂內(nèi)的尸體忽然破棺而出胆敞,到底是詐尸還是另有隱情,我是刑警寧澤杂伟,帶...
    沈念sama閱讀 35,655評論 5 346
  • 正文 年R本政府宣布竿秆,位于F島的核電站,受9級特大地震影響稿壁,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜歉备,卻給世界環(huán)境...
    茶點故事閱讀 41,265評論 3 329
  • 文/蒙蒙 一傅是、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦喧笔、人聲如沸帽驯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽尼变。三九已至,卻和暖如春浆劲,著一層夾襖步出監(jiān)牢的瞬間嫌术,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評論 1 269
  • 我被黑心中介騙來泰國打工牌借, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留度气,地道東北人。 一個月前我還...
    沈念sama閱讀 48,095評論 3 370
  • 正文 我出身青樓膨报,卻偏偏與公主長得像磷籍,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子现柠,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,884評論 2 354

推薦閱讀更多精彩內(nèi)容