Maven、Gradle、Ant、Ivy、Bazel 和 SBT 的詳細對比

老马啸西风發表於2024-03-01

擴充閱讀

maven 包管理平臺-01-maven 入門介紹 + Maven、Gradle、Ant、Ivy、Bazel 和 SBT 的詳細對比表格

maven 包管理平臺-02-windows 安裝配置 + mac 安裝配置

maven 包管理平臺-03-maven project maven 專案的建立入門

maven 包管理平臺-04-maven archetype 專案原型

maven 包管理平臺-05-multi module 多模組

maven 包管理平臺-06-常用技巧 實時更新快照/亂碼問題/下載很慢/包依賴解決包衝突/如何匯入本地 jar

maven 包管理平臺-07-plugins 常見外掛介紹

maven 包管理平臺-08-nexus 自己搭建 maven 倉庫

Maven

Apache maven 是一個軟體專案管理和理解工具。

基於專案物件模型(POM)的概念,Maven 可以從一箇中心資訊管理專案的構建、報告和文件。

chat

詳細介紹一下 maven

Maven 是一個流行的專案管理工具,主要用於 Java 專案的構建、依賴管理和專案管理。

它提供了一種標準化的方式來構建專案,使得專案構建過程更加自動化、簡化和可維護。

以下是關於 Maven 的詳細介紹:

1. 專案構建

Maven 提供了一種稱為 POM(Project Object Model)的專案物件模型,它是一個 XML 檔案,描述了專案的基本資訊、依賴關係、外掛配置等。透過定義 POM,Maven 能夠執行專案的構建和管理。

2. 依賴管理

Maven 提供了強大的依賴管理功能。透過在 POM 中宣告專案所需的依賴,Maven 能夠自動下載這些依賴,並且可以管理依賴的版本和傳遞性依賴。這簡化了專案的配置和構建過程,也確保了專案的依賴關係的一致性。

3. 標準化的專案結構

Maven 鼓勵使用一種標準的專案結構,這種結構使得專案更易於理解和維護。通常,Maven 專案的原始碼放置在 src/main/java 目錄下,測試程式碼放置在 src/test/java 目錄下,資原始檔放置在 src/main/resourcessrc/test/resources 目錄下等。

4. 外掛系統

Maven 使用外掛來執行專案構建中的各種任務,如編譯、測試、打包等。Maven 提供了大量的標準外掛,同時也支援自定義外掛以滿足特定專案需求。

5. 生命週期和階段

Maven 定義了一組標準的生命週期(Lifecycle),每個生命週期包含一系列階段(Phase),例如 compiletestpackageinstalldeploy 等。透過執行不同的 Maven 命令,可以觸發相應的生命週期和階段,從而完成專案的構建過程。

6. 中央倉庫

Maven 的中央倉庫是一個儲存了大量 Java 庫和框架的公共倉庫,開發者可以從中央倉庫中獲取所需的依賴。同時,Maven 還支援私有倉庫,開發者可以將自己的依賴釋出到私有倉庫中供團隊內部使用。

7. 常用命令

  • mvn clean: 清除 target 目錄中的構建輸出。
  • mvn compile: 編譯專案原始碼。
  • mvn test: 執行專案的單元測試。
  • mvn package: 將專案打包成 JAR、WAR 或其他格式的歸檔檔案。
  • mvn install: 將專案構建輸出安裝到本地 Maven 倉庫中。
  • mvn deploy: 將專案構建輸出部署到遠端 Maven 倉庫中。

為什麼需要 maven? 以前手動管理 jar 包的方式有哪些問題?

需要 Maven 的原因有很多,主要包括以下幾點:

  1. 依賴管理:手動管理 jar 包可能會導致依賴混亂、版本衝突等問題。Maven 提供了依賴管理功能,可以自動下載專案所需的依賴,並且能夠管理依賴的版本和傳遞性依賴,確保專案的依賴關係清晰和一致。

  2. 專案結構標準化:Maven 規定了一種標準的專案結構,包括原始碼、資原始檔、測試程式碼等的放置位置。採用這種標準化的專案結構,可以使專案更易於理解和維護。

  3. 自動化構建:Maven 提供了一種自動化的專案構建過程,透過定義 POM 檔案和執行 Maven 命令,可以自動完成編譯、測試、打包等任務,提高了專案構建的效率和可靠性。

  4. 外掛系統:Maven 的外掛系統提供了豐富的外掛,可以用於執行各種專案構建任務。開發者可以使用現有的標準外掛,也可以編寫自定義外掛以滿足特定需求。

  5. 中央倉庫支援:Maven 的中央倉庫是一個包含了大量 Java 庫和框架的公共倉庫,開發者可以方便地從中央倉庫獲取所需的依賴。同時,Maven 也支援私有倉庫,可以用於團隊內部共享依賴。

手動管理 jar 包的方式存在以下一些問題:

  • 依賴衝突:手動管理 jar 包可能會導致依賴衝突,即不同的 jar 包需要使用相同的類但版本不同,這可能會導致執行時的錯誤。
  • 版本控制困難:手動下載和管理 jar 包,需要手動處理版本控制,可能會出現版本錯亂或者遺漏的情況。
  • 難以維護:手動管理 jar 包需要開發者手動處理依賴、編譯、打包等任務,增加了維護成本,而且容易出現錯誤。
  • 缺乏標準化:缺乏標準的專案結構和依賴管理方式,使得專案難以理解和維護,尤其在團隊協作中更加困難。

類似 maven 的 java 包管理工具還有哪些?

一些類似 Maven 的 Java 包管理工具:

  1. Gradle:Gradle 是另一個流行的專案構建和依賴管理工具,它採用了基於 Groovy 的領域特定語言(DSL)來定義構建指令碼,使得構建過程更加靈活和可配置。Gradle 支援 Maven 倉庫和外掛,具有與 Maven 類似的功能,但更加靈活和強大。

  2. Ant:Ant 是一個基於 XML 的構建工具,與 Maven 和 Gradle 相比,它更加輕量級和靈活,不過相應地也需要更多的配置和手動管理。Ant 廣泛用於早期 Java 專案的構建和自動化任務。

  3. Ivy:Ivy 是 Apache Ant 的一個子專案,它專注於依賴管理,可以與 Ant 結合使用。與 Maven 和 Gradle 不同,Ivy 不負責專案的構建,而是專注於依賴的解析和管理。

  4. Bazel:Bazel 是 Google 開發的一個構建和測試工具,它支援多種語言,包括 Java。Bazel 的一個特點是構建結果的快取和增量構建,能夠提高構建效率和效能。

  5. SBT:SBT(Simple Build Tool)是 Scala 社群廣泛使用的構建工具,它支援 Scala 和 Java 專案的構建,採用基於 Scala 的 DSL,具有靈活的構建配置和依賴管理功能。

Maven 和 Gradle 是目前最流行的 Java 包管理工具,它們都提供了強大的依賴管理和專案構建功能,可以滿足大多數 Java 專案的需求。

對比表格

下面是 Maven、Gradle、Ant、Ivy、Bazel 和 SBT 的詳細對比表格:

特性 Maven Gradle Ant Ivy Bazel SBT
語言 Java Groovy 和 Kotlin XML XML Python 和 Starlark Scala 和 Java
構建指令碼語言 XML Groovy XML - Starlark Scala
依賴管理
專案結構 規範化 可配置 靈活 靈活 靈活 靈活
外掛系統
中央倉庫支援
生態系統
快取和增量構建
社群活躍度 非常活躍 非常活躍 活躍 活躍 活躍 活躍

maven 最簡單的入門使用例子

以下是一個 Maven 最簡單的入門使用例子:

假設你有一個簡單的 Java 專案,包含一個原始檔 HelloWorld.java,內容如下:

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello, Maven!");
    }
}

現在,你想使用 Maven 來構建這個專案。

  1. 建立專案目錄結構:

在你選擇的位置建立一個名為 HelloMaven 的資料夾,並在其中建立以下目錄結構:

HelloMaven
└── src
    └── main
        └── java
            └── HelloWorld.java
  1. 建立 Maven 專案描述檔案 pom.xml

HelloMaven 資料夾中建立一個名為 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.example</groupId>
    <artifactId>HelloMaven</artifactId>
    <version>1.0-SNAPSHOT</version>
  
</project>

這個 pom.xml 檔案定義了一個 Maven 專案,其中包含了專案的基本資訊,如 groupId、artifactId 和 version。

  1. 構建專案:

開啟命令列工具,進入 HelloMaven 資料夾,並執行以下 Maven 命令:

mvn compile

這個命令將編譯專案的原始碼。在成功編譯後,你可以在 HelloMaven/target/classes 目錄下找到編譯後的 .class 檔案。

  1. 執行專案:

繼續在命令列工具中執行以下 Maven 命令:

mvn exec:java -Dexec.mainClass="HelloWorld"

這個命令將執行 HelloWorld 類中的 main 方法,輸出 "Hello, Maven!"。

透過這個例子,你可以看到 Maven 是如何簡化專案構建和管理的。

本文由部落格一文多發平臺 OpenWrite 釋出!

相關文章