iT邦幫忙

2022 iThome 鐵人賽

DAY 20
0

Maven 是一個專案管理與自動化建構工具,主要用於 Java 專案,但也支援 C#、Ruby、Scala 等其它語言。目前 Maven 由 Apache軟體基金會 管理,因此也稱作 Apache Maven

它解決了軟體開發的兩大難題:

  • 如何建構專案
  • 如何管理各種軟體套件的依賴關係

通過在 XML 檔案中描述專案的基本資訊、與外部模組的依賴關係、建構順序、目錄與外掛程式,並執行 Maven 預設的建構流程就可快速完成編譯、打包等任務。Maven 會自動從遠端的程式庫下載依賴的函式庫與外掛程式,簡化手動下載的工作。

環境建置

兩種安裝 Maven 的方式:

  • Eclipse 插件 — m2e

    如果你使用的 IDE 是 Eclipse 可以直接使用 m2e 插件,能省略一些設定步驟。

    Eclipse 預設內建 m2e,可以打開 Eclipse 到 Help > About Eclipse IDE 確認是否已安裝。

    https://ithelp.ithome.com.tw/upload/images/20221003/20152578zb28gpNpTv.jpg

    如果沒有,請參考安裝說明: https://github.com/eclipse-m2e/m2e-core/blob/master/README.md#-installation

  • 單獨安裝 Maven

    安裝好 Maven 後到 IDE 設定 Maven。

    Eclipse 設定方式:

    1. window > Preferences > Maven > InstallationsAdd... 新增你的 Maven 根目錄,並勾選該項目表示使用這個目錄下的 Maven。

    https://ithelp.ithome.com.tw/upload/images/20221003/20152578pjdCF9XNMy.jpg

    1. window > Preferences > Maven > User SettingsUser Settings 欄位設定成 Maven 目錄下的 settings.xml 路徑,然後點 Update Settings

    https://ithelp.ithome.com.tw/upload/images/20221003/20152578i0yw1gE9nD.jpg

快速入門

建立專案

要使用 Maven 管理專案,可選擇建立純 Maven 專案或在其它類型專案中選擇用 Maven 管理,例如使用 Eclipse 的 Project Wizard 建立 Spring Boot 專案時會有選項讓你選擇要用 Maven 還是其它工具管理專案。

建立步驟根據你用的 IDE 與版本會有差異,這邊就不詳細贅述。後面的 IDE 操作都是以 Eclipse 為例。

專案結構

my-app
|-- pom.xml (專案的 Maven 設定檔)
`-- src
|   |-- main (開發主目錄)
|   |   |-- java (原始碼)
|   |   |   `-- com
|   |   |       `-- mycompany
|   |   |           `-- app
|   |   |               `-- App.java
|   |   `-- resources (各種靜態資源/設定檔)
|   `-- test (測試主目錄)
|       `-- java
|           `-- com
|               `-- mycompany
|                   `-- app
|                       `-- AppTest.java
`-- target (打包主目錄)
    `-- my-app.jar/war

管理專案

pom.xml 是 Maven 專案的核心設定檔。

以一個 Spring Boot 專案的 pom.xml 當範例:

<?xml version="1.0" encoding="UTF-8"?>
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.6.9</version>
        <relativePath />
    </parent>

    <!-- 專案基本資訊 -->
    <groupId>com.mycompany.app</groupId>
    <artifactId>my-app</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>My App</name>
    <description>This is my app project</description>

    <!-- 可在 properties 中自訂屬性,並在 POM 的其它地方用 ${屬性名} 引用 -->
    <properties>
        <lombok.version>1.18.22</lombok.version>
    </properties>

    <!-- 依賴的函式庫 -->
    <dependencies>

        <!-- 引用函式庫的設定 -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <!-- 可把版本寫在此處,也可以設定在 <properties> 裡引用,方便管理 -->
            <version>${lombok.version}</version>
            <!-- 表示程式執行時,函式庫由 JDK 或容器提供,打包時不需包含進去 -->
            <scope>provided</scope>
        </dependency>

    </dependencies>

</project>

<dependencies> 內可以設定多個 <dependency>,不需要把函式庫依賴的其它項目也加進來,Maven 會自動導入所有需要的依賴項。

看起來很複雜對吧?別害怕,Eclipse 也有提供圖形化介面讓你不用接觸 POM 的語法也能進行設定。而且 Maven 已經是很成熟的工具,網路上資源相當豐富,很多時候就只是複製貼上而已。

建構專案

在動手建構專案前先讓我們了解一些 Maven 的基本概念。

基本概念

Build Lifecycle

Build Lifecycle (建構生命週期) 是 Maven 建構專案的核心概念。Maven 有三個 lifecycle,分別是:

  • default - 部屬專案
  • clean - 清理專案
  • site - 建立文件網站

Phase

Lifecycle 由一連串有序的 Phase (階段) 組成,例如生命週期 default 包含以下 Phase:

以下 phase 已簡化,非完整的 default 生命週期。

  1. validate - 驗證專案是否正確
  2. compile - 編譯程式碼
  3. test - 單元測試
  4. package - 打包
  5. verify - 整合測試
  6. install - 打包好的結果放到本地 repository,作為一個依賴項給其它專案使用
  7. deploy - 打包好的結果放到遠端 repository,供其他人使用

如果想把專案打包成 JAR,只要在 CLI 執行指令:

mvn package

Maven 會從 validate 開始照順序執行到 package,並把打包好的檔案放在 target 目錄下。

Plugin:Goal

Phase 代表 lifecycle 的某個階段,而完成階段的方式可能不止一種。Goal 代表某種特定的任務,它由 Plugin 提供並綁定到某些 phase。沒有綁定到 phase 的 goal 可以單獨執行,例如:

mvn clean dependency:copy-dependencies package

指令使 Maven 按照順序執行:

  1. clean - Lifecycle clean 中唯一的一個 phase — clean
  2. dependency:copy-dependencies - Plugin dependency 的 goal — copy-dependencies
  3. package - Lifecycle default 執行到 phase package 為止。

想詳細了解有那些 phase/goal 可參考以下連結:

開始建構

在你的專案名稱上點右鍵 Run As > Maven Build... 打開以下視窗:

https://ithelp.ithome.com.tw/upload/images/20221003/20152578R3cJ2TE5WY.jpg

Goals 欄位填入 clean package (這邊不用像 CLI 以 mvn 開頭),點 Apply > Run

Maven 會先執行 clean 刪除 target 目錄,再執行 package 打包專案,當你看到...

[INFO] BUILD SUCCESS

恭喜,你成功啦!

打包好的檔案就在 target 目錄下,以後要執行一樣的指令時,在專案名稱上點右鍵 Run As > Run Configurations... 能找到以前配置過的設定。


上一篇
[Day19] Google My Business簡介
下一篇
[Day21]MyBatis簡介
系列文
Google商家大解密就靠網頁設計來加成30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言