Maven多模塊的設計與實戰

一、多模塊項目的組織

當我們需要管理一個複雜的項目時,我們通常需要將這個項目劃分成幾個子模塊。 這些子模塊可以是獨立的,也可以是相互依賴的。 例如,在一個Web應用程序中,我們可以分別為Service、Web和DAO層創建三個子模塊。

下面是一個簡單的多模塊項目的結構示例:

example-project/
|-- pom.xml(父模塊pom)
|-- example-service/
|   |-- pom.xml(服務模塊pom)
|   |-- src/
|       |-- main/
|       |   |-- java/...
|       |   |-- resources/...
|       |-- test/...
|-- example-web/
|   |-- pom.xml(Web模塊pom)
|   |-- src/
|       |-- main/
|       |   |-- webapp/
|       |   |   |-- WEB-INF/...
|       |   |-- java/...
|       |   |-- resources/...
|       |-- test/...
|-- example-dao/
|   |-- pom.xml(DAO模塊pom)
|   |-- src/
|       |-- main/
|       |   |-- java/...
|       |   |-- resources/...
|       |-- test/...

在上面的示例中,example-project是整個項目的父模塊,example-service、example-web和example-dao分別是三個子模塊。父模塊有一個pom.xml文件來定義子模塊的依賴關係和通用的配置。每個子模塊都有自己的pom.xml文件和源代碼目錄。

二、基本的Maven多模塊配置

下面是一個簡單的Maven多模塊配置文件,包括一個父pom和兩個子模塊pom:

1.父模塊pom.xml

<project>
    <groupId>com.example</groupId>
    <artifactId>example-project</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>pom</packaging>

    <modules>
        <module>example-service</module>
        <module>example-web</module>
    </modules>

    <dependencies>
        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>29.0-jre</version>
        </dependency>
        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <version>42.2.14</version>
        </dependency>
    </dependencies>

    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.8.1</version>
                    <configuration>
                        <source>1.8</source>
                        <target>1.8</target>
                    </configuration>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>
</project>

上面的pom.xml文件定義了整個項目的groupId、artifactId和version。dependency元素定義了整個項目的依賴項,例如guava和postgresql庫。modules元素定義了父模塊所包括的子模塊。build元素定義了整個項目的編譯配置,其中包括編譯插件的設置。由於這些設置是對整個項目有效的,因此它們應該定義在父模塊中。

2.服務模塊example-service的pom.xml

<project>
    <parent>
        <groupId>com.example</groupId>
        <artifactId>example-project</artifactId>
        <version>1.0.0-SNAPSHOT</version>
    </parent>

    <groupId>com.example</groupId>
    <artifactId>example-service</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <dependencies>
        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>29.0-jre</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

上面的pom.xml文件定義了服務模塊的groupId、artifactId和version。parent元素指定了父模塊。dependencies元素定義了子模塊的依賴項。build元素定義了子模塊的編譯配置,其中包括編譯插件的設置。

3.Web模塊example-web的pom.xml

<project>
    <parent>
        <groupId>com.example</groupId>
        <artifactId>example-project</artifactId>
        <version>1.0.0-SNAPSHOT</version>
    </parent>

    <groupId>com.example</groupId>
    <artifactId>example-web</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>war</packaging>

    <dependencies>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>com.example</groupId>
            <artifactId>example-service</artifactId>
            <version>1.0.0-SNAPSHOT</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>3.2.3</version>
                <configuration>
                    <webXml>src/main/webapp/WEB-INF/web.xml</webXml>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

上面的pom.xml文件定義了Web模塊的groupId、artifactId和version。parent元素指定了父模塊。dependencies元素定義了子模塊的依賴項。build元素定義了子模塊的編譯配置,其中包括編譯插件的設置。

三、多模塊項目的實戰

我們可以使用多模塊Maven項目的大多數功能來管理我們的項目。 在下面的示例中,我們將創建一個簡單的多模塊項目,該項目包含一個主模塊和兩個子模塊。 主模塊(name-parent)將作為父模塊,其中一個子模塊(name-app)將是我們的主要應用程序,另一個子模塊(name-lib)將是我們的庫。

1.創建主模塊pom.xml文件

在我們開始之前,讓我們先創建父模塊的pom.xml文件。 我們可以按照下面的結構編寫:

<project>
    <groupId>com.example</groupId>
    <artifactId>name-parent</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>pom</packaging>

    <modules>
        <module>name-app</module>
        <module>name-lib</module>
    </modules>

    <properties>
        <java.version>1.8</java.version>
        <spring.boot.version>2.2.6.RELEASE</spring.boot.version>
    </properties>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-parent</artifactId>
                <version>${spring.boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

我們使用了dependencyManagement元素來管理所有的依賴項。 我們可以從Spring Boot開發人員頁面下載主要版本,然後從Dependency Information部分中獲取最新版本。 properties元素定義了我們使用的Java和Spring Boot版本。最後,build元素定義了我們使用的Spring Boot插件。

2.創建子模塊name-app的pom.xml文件

我們還需要為我們的Spring Boot應用程序創建一個子模塊,其中包含應用程序的代碼和依賴項。創建子模塊的過程與父模塊類似:

<project>
    <parent>
        <groupId>com.example</groupId>
        <artifactId>name-parent</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <groupId>com.example</groupId>
    <artifactId>name-app</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>com.example</groupId>
            <artifactId>name-lib</artifactId>
            <version>${project.version}</version>
        </dependency>
    </dependencies>
</project>

我們在父模塊中指定了dependencyManagement元素,所以我們不需要在這裡重複定義。 我們將Spring Boot和我們的庫作為依賴項添加到此模

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/235867.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 11:57
下一篇 2024-12-12 11:57

相關推薦

  • Django框架:從簡介到項目實戰

    本文將從Django的介紹,以及如何搭建Django環境開始,逐步深入到Django模型、視圖、模板、表單,最後通過一個小型項目實戰,進行綜合性的應用,讓讀者獲得更深入的學習。 一…

    編程 2025-04-28
  • 鍵值存儲(kvs):從基礎概念到實戰應用

    本文將從基礎概念入手,介紹鍵值存儲(kvs)的概念、原理以及實戰應用,並給出代碼實現。通過閱讀本文,您將了解鍵值存儲的優缺點,如何選擇最適合的鍵值存儲方案,以及如何使用鍵值存儲解決…

    編程 2025-04-28
  • Python編程實戰:用Python做網頁與HTML

    Python語言是一種被廣泛應用的高級編程語言,也是一種非常適合於開發網頁和處理HTML的語言。在本文中,我們將從多個方面介紹如何用Python來編寫網頁和處理HTML。 一、Py…

    編程 2025-04-28
  • Webrtc音視頻開發React+Flutter+Go實戰PDF

    本文將從多個方面介紹如何使用React、Flutter和Go來進行Webrtc音視頻開發,並提供相應的代碼示例。 一、Webrtc音視頻開發介紹 Webrtc是Google開發的一…

    編程 2025-04-27
  • Python自動化交易實戰教程

    本教程將詳細介紹使用Python進行自動化交易的方法,包括如何選擇優秀的交易策略、如何獲取市場數據、如何實現策略並進行回測,以及如何使用Python自動化下單,並進行實盤交易,讓您…

    編程 2025-04-27
  • Python開源量化系統的全面介紹和應用實戰

    本文將從多個方面對Python開源量化系統進行介紹,並通過實例講解其應用。通過本文的閱讀,您將了解量化交易的概念、Python的量化工具、各種策略的實現方法以及回測與回溯分析等知識…

    編程 2025-04-27
  • Python讀取同花順日線數據實戰

    本篇文章將以「Python讀取同花順日線數據」為主題,介紹如何使用python語言從同花順網站上獲取股票日線數據。通過該實戰,讀者可以學習到如何使用Python進行網頁數據抓取、數…

    編程 2025-04-27
  • 深入了解scala-maven-plugin

    一、簡介 Scala-maven-plugin 是一個創造和管理 Scala 項目的maven插件,它可以自動生成基本項目結構、依賴配置、Scala文件等。使用它可以使我們專註於代…

    編程 2025-04-25
  • Maven配置阿里雲鏡像詳解

    Maven是一個基於項目對象模型(POM)的構建工具,用於管理Java項目的構建、依賴和發布。在使用Maven下載依賴庫時,原始倉庫伺服器可能因為網路原因導致下載速度緩慢或者失敗。…

    編程 2025-04-25
  • IDEA安裝Maven插件

    一、為什麼需要安裝Maven插件? Maven是一款Java開發的構建工具,可以自動化構建、測試和部署Java項目。而Maven插件則是將Maven與IDEA集成,使得開發過程變得…

    編程 2025-04-25

發表回復

登錄後才能評論