1. 程式人生 > >Maven工程的多模組專案、專案與專案之間的引用

Maven工程的多模組專案、專案與專案之間的引用

     一個大專案需要一個團隊來完成,然後一個大型專案就拆分成幾塊來同時開發,節省時間,提高效率.


大致分為以下幾個模組(僅是自身經歷):
|—依賴管理工程模組:一般現在開發都是以maven來管理jar包,方便.所以整個工程的依賴統一放在一個單獨工程中,一般叫做父工程xxx-parent.
     |– 注意事項:父工程打包方式設定成pom
                       建立父工程時,不要勾選maven模板,他就是一個管理依賴的,不處理業務.如下圖
這裡寫圖片描述


|—pom檔案格式如下:

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.qiushiju</groupId>
<artifactId>xxx-parent</artifactId> <version>1.0-SNAPSHOT</version> <packaging>pom</packaging> <!-- 集中定義依賴版本號 --> <properties> <junit.version>4.12</junit.version> <spring.version>4.1.3.RELEASE</spring.version
>
<mybatis.version>3.2.8</mybatis.version> <mybatis.spring.version>1.2.2</mybatis.spring.version> <mybatis.paginator.version>1.2.15</mybatis.paginator.version> <mysql.version>5.1.32</mysql.version> <slf4j.version>1.6.4</slf4j.version> <jackson.version>2.4.2</jackson.version> <druid.version>1.0.9</druid.version> <httpclient.version>4.3.5</httpclient.version> <jstl.version>1.2</jstl.version> <servlet-api.version>2.5</servlet-api.version> <jsp-api.version>2.0</jsp-api.version> <joda-time.version>2.5</joda-time.version> <commons-lang3.version>3.3.2</commons-lang3.version> <commons-io.version>1.3.2</commons-io.version> <commons-net.version>3.3</commons-net.version> <pagehelper.version>3.4.2</pagehelper.version> <jsqlparser.version>0.9.1</jsqlparser.version> <commons-fileupload.version>1.3.1</commons-fileupload.version> <jedis.version>2.7.2</jedis.version> <solrj.version>4.10.3</solrj.version> </properties> <dependencyManagement> <dependencies> <!-- 時間操作元件 --> <dependency> <groupId>joda-time</groupId> <artifactId>joda-time</artifactId> <version>${joda-time.version}</version> </dependency> <!-- Apache工具元件 --> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>${commons-lang3.version}</version> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-io</artifactId> <version>${commons-io.version}</version> </dependency> <dependency> <groupId>commons-net</groupId> <artifactId>commons-net</artifactId> <version>${commons-net.version}</version> </dependency> <!-- Jackson Json處理工具包 --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>${jackson.version}</version> </dependency> <!-- httpclient --> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>${httpclient.version}</version> </dependency> <!-- 單元測試 --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>${junit.version}</version> <scope>test</scope> </dependency> <!-- 日誌處理 --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>${slf4j.version}</version> </dependency> <!-- Mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>${mybatis.version}</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>${mybatis.spring.version}</version> </dependency> <dependency> <groupId>com.github.miemiedev</groupId> <artifactId>mybatis-paginator</artifactId> <version>${mybatis.paginator.version}</version> </dependency> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>${pagehelper.version}</version> </dependency> <!-- MySql --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>${mysql.version}</version> </dependency> <!-- 連線池 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>${druid.version}</version> </dependency> <!-- Spring --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aspects</artifactId> <version>${spring.version}</version> </dependency> <!-- JSP相關 --> <dependency> <groupId>jstl</groupId> <artifactId>jstl</artifactId> <version>${jstl.version}</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>${servlet-api.version}</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jsp-api</artifactId> <version>${jsp-api.version}</version> <scope>provided</scope> </dependency> <!-- 檔案上傳元件 --> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>${commons-fileupload.version}</version> </dependency> <!-- Redis客戶端 --> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>${jedis.version}</version> </dependency> <!-- solr客戶端 --> <dependency> <groupId>org.apache.solr</groupId> <artifactId>solr-solrj</artifactId> <version>${solrj.version}</version> </dependency> </dependencies> </dependencyManagement> <build> <finalName>${project.artifactId}</finalName> <plugins> <!-- 資原始檔拷貝外掛 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <version>2.7</version> <configuration> <encoding>UTF-8</encoding> </configuration> </plugin> <!-- java編譯外掛 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.2</version> <configuration> <source>1.8</source> <target>1.8</target> <encoding>UTF-8</encoding> </configuration> </plugin> </plugins> <pluginManagement> <plugins> <!--&lt;!&ndash; 配置Tomcat外掛 &ndash;&gt;--> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat-maven-plugin</artifactId> <version>2.2</version> </plugin> </plugins> </pluginManagement> </build> </project>

        |—pom檔案中的< properties>< /properties>標籤內是下面< dependencies>< /dependencies>標籤中的版本號,把它們提取出來,便於方便管理.
                |—把這個工程編譯安裝進本地倉庫,這樣後面其他的工程才能使用IDEA中是這樣操作
這裡寫圖片描述
                |—其他模組怎麼使用父工程的依賴,下面幾個模組介紹


|—公共工程模組(common):這個工程內放置的是整個專案要用用的公共類,例如日期格式類(DataUtil.java)、分頁結果類(PafeReult.java)、封裝JSON結果類(JsonResult.java)等等….
                |—建立公共工程(xxx-common),使用maven建立一個java工程,因為它只提供幾個類,不做web專案.如圖
這裡寫圖片描述
                |—打包方式為jar包.因為它其中的類需要被別的工程使用.可以在pom.xml檔案中寫,指定打包方式

<packaging>jar</packaging>


                |—繼承父工程(xxx-parent).在pom.xml檔案中寫入如下程式碼

<parent>
        <groupId>com.qiushiju</groupId>
        <artifactId>xxx-parent</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>


                |—寫入本工程實際需要的依賴(從父工程中copy,不需版本資訊)比如

<dependencies>
.
.
.
 <!-- 日誌處理 -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
        </dependency>
        .
        .
        .
        </dependencies>


                |—把xxx-common工程也編譯打包安裝進本地倉庫,方便別人呼叫,打包方式參考上面


|—開發工程模組(比如後臺管理系統或者前臺管理系統xxx-manager):這個模組一般都是MVC架構,所以需要三個子模組來分開開發以提升效率.三個子模組分別是
xxx-manager-pojo、xxx-manager-controller、xxx-manager-service、xxx-manager-dao。如圖專案結構
這裡寫圖片描述

                |—先說xxx-manager的pom.xml,①它需要繼承xxx-parent使用它的依賴,②還有需要加入xxx-common的依賴,要使用其中的工具類
部分程式碼:

 <packaging>pom</packaging>

 <parent>
        <groupId>com.qiushiju</groupId>
        <artifactId>xxx-parent</artifactId>
        <version>1.0-SNAPSHOT</version>
 </parent>
    <!-- 依賴管理 -->
<dependencies>
            <!-- 加入common依賴 -->
        <dependency>
            <groupId>com.qiushiju</groupId>
            <artifactId>xxx-common</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
  ...
  </dependencies>
   <modules>

        <module>xxx-manager-pojo</module>
        <module>xxx-manager-mapper</module>
        <module>xxx-manager-service</module>
        <module>xxx-manager-controller</module>

    </modules>


                |—①從上面程式碼看到xxx-manager的打包方式要為pom.因為它的幾個子模組要使用它的依賴.
                ②沒有別的依賴,因為依賴在四個子模組的各自pom.xml檔案中寫著,每個模組寫各自所需的依賴
                ③< module>標籤,建立一個子模組就會自動出來這一標籤~

                |—現在來說在xxx-manager的基礎上建立子專案,方法如下:xxx-manager專案上右鍵-new-module
這裡寫圖片描述


                |—同樣的步驟建立其他子模組.每個子類建立成功後,在自己的pom.xml檔案中都會自動有< parent>標籤來繼承父類,

<!-- 繼承父類 -->
    <parent>
        <artifactId>xxx-manager</artifactId>
        <groupId>com.qiushiju</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
     <dependencies>
     <!-- controller需要service的依賴, -->
     <!-- 在xxx-manager-service的pom檔案中,也需要dao層的依賴 -->
        <dependency>
            <groupId>com.qiushiju</groupId>
            <artifactId>xxx-manager-service</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <!-- JSP相關 -->
        <dependency>
            <groupId>jstl</groupId>
            <artifactId>jstl</artifactId>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jsp-api</artifactId>
            <scope>provided</scope>
        </dependency>
        ..
        </dependencies>

                |—特殊的,①pojo,service,dao模組需要打包方式為jar,因為controller需要使用它們的類.而controller模組是需要建立為webapp,
                ②dao層使用mybatis,因此會有Mapper.xml檔案.因此打包時會出錯,需要在xxx-manager-dao的pom檔案中加入配置程式碼,程式碼如下

 <!-- 如果不新增此節點mybatis的mapper.xml檔案都會被漏掉。 -->
    <build>
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
        </resources>
    </build>

                |—ssm的配置檔案寫在xxx-manager-controller的src-main-resource目錄下與java同級.靜態檔案放在wabapp下
這裡寫圖片描述
                |—如果新建的工程沒有這三個資料夾,就自己建立.然後mark這個資料夾為相應的資原始檔
這裡寫圖片描述

注意:不管哪一個模組修改,都需要重新編譯,打包,安裝進倉庫,才能時時更新,別的工程才能呼叫.

後話:自己專案中的總結,可能有疏漏,有好的意見或建議歡迎指正