第二章 Java框架整合--maven父子模塊

来源:http://www.cnblogs.com/java-zhao/archive/2016/01/06/5107569.html
-Advertisement-
Play Games

2.1、maven父子模塊在實際開發中,我們基本都會用maven父子分模塊的方式進行項目的開發。2.2、實際操作2.2.1、手工建立一個ssmm0的文件夾,併在該文件夾中加入一個pom.xml文件,該pom.xml文件內容如下: 1 2 4 5 4.0.0 6 7 com.x...


2.1、maven父子模塊

在實際開發中,我們基本都會用maven父子分模塊的方式進行項目的開發。

2.2、實際操作

2.2.1、手工建立一個ssmm0的文件夾,併在該文件夾中加入一個pom.xml文件,該pom.xml文件內容如下:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 3     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
 4 
 5     <modelVersion>4.0.0</modelVersion>
 6 
 7     <groupId>com.xxx</groupId>
 8     <artifactId>ssmm0</artifactId>
 9     <version>1.0-SNAPSHOT</version>
10 
11     <name>ssmm0</name>
12     <packaging>pom</packaging><!-- 父模塊 -->
13     
14     <!-- 管理子模塊 -->
15     <modules>
16         <module>ssmm</module>
17     </modules>
18 
19     <properties>
20         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
21         <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
22     </properties>
23 </project>
View Code

註意:

  • 父模塊的pom.xml文件的<packaging>標簽內容為pom;而需要部署的子項目為war;只是作為其他項目的工具的子項目為jar
  • 使用<modules>標簽管理所有的子模塊,以後再有新的子模塊,只需要在<modules>添加新的<module>子標簽即可

2.2.2、將上一章建好的那個項目ssmm放入ssmm0文件夾下,修改pom.xml如下:

  1 <?xml version="1.0" encoding="UTF-8"?>
  2 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  4 
  5     <modelVersion>4.0.0</modelVersion>
  6 
  7     <!-- 指定父模塊 -->
  8     <parent>
  9         <groupId>com.xxx</groupId>
 10         <artifactId>ssmm0</artifactId>
 11         <version>1.0-SNAPSHOT</version>
 12     </parent>
 13     
 14     <groupId>com.xxx.ssmm0</groupId>
 15     <artifactId>ssmm0-ssmm</artifactId>
 16     <!--<version>1.0-SNAPSHOT</version>--><!-- 父模塊已經指定了版本號,這裡就不用了-->
 17 
 18     <name>ssmm0-ssmm</name>
 19     <packaging>war</packaging>
 20 
 21     <properties>
 22         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 23         <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
 24     </properties>
 25 
 26     <!-- 引入實際依賴 -->
 27     <dependencies>
 28         <!-- json -->
 29         <dependency>
 30             <groupId>com.alibaba</groupId>
 31             <artifactId>fastjson</artifactId>
 32             <version>1.1.39</version>
 33         </dependency>
 34         <!-- servlet -->
 35         <dependency>
 36             <groupId>javax.servlet</groupId>
 37             <artifactId>javax.servlet-api</artifactId>
 38             <version>3.0.1</version>
 39             <scope>provided</scope>
 40         </dependency>
 41         <!-- spring -->
 42         <dependency>
 43             <groupId>org.springframework</groupId>
 44             <artifactId>spring-core</artifactId>
 45             <version>3.2.6.RELEASE</version>
 46         </dependency>
 47         <dependency>
 48             <groupId>org.springframework</groupId>
 49             <artifactId>spring-beans</artifactId>
 50             <version>3.2.6.RELEASE</version>
 51         </dependency>
 52         <dependency>
 53             <groupId>org.springframework</groupId>
 54             <artifactId>spring-context</artifactId>
 55             <version>3.2.6.RELEASE</version>
 56         </dependency>
 57         <dependency>
 58             <groupId>org.springframework</groupId>
 59             <artifactId>spring-web</artifactId>
 60             <version>3.2.6.RELEASE</version>
 61         </dependency>
 62         <dependency>
 63             <groupId>org.springframework</groupId>
 64             <artifactId>spring-webmvc</artifactId>
 65             <version>3.2.6.RELEASE</version>
 66         </dependency>
 67         <!-- 這個是使用velocity的必備包 -->
 68         <dependency>
 69             <groupId>org.springframework</groupId>
 70             <artifactId>spring-context-support</artifactId>
 71             <version>3.2.6.RELEASE</version>
 72             <scope>compile</scope>
 73         </dependency>
 74         <!-- mysql -->
 75         <dependency>
 76             <groupId>mysql</groupId>
 77             <artifactId>mysql-connector-java</artifactId>
 78             <version>5.1.27</version>
 79             <scope>runtime</scope>
 80         </dependency>
 81         <!-- 數據源 -->
 82         <dependency>
 83             <groupId>org.apache.tomcat</groupId>
 84             <artifactId>tomcat-jdbc</artifactId>
 85             <version>7.0.47</version>
 86         </dependency>
 87         <!-- mybatis -->
 88         <dependency>
 89             <groupId>org.mybatis</groupId>
 90             <artifactId>mybatis</artifactId>
 91             <version>3.1.1</version>
 92         </dependency>
 93         <dependency>
 94             <groupId>org.mybatis</groupId>
 95             <artifactId>mybatis-spring</artifactId>
 96             <version>1.1.1</version>
 97         </dependency>
 98         <!-- velocity -->
 99         <dependency>
100             <groupId>org.apache.velocity</groupId>
101             <artifactId>velocity</artifactId>
102             <version>1.5</version>
103         </dependency>
104         <dependency>
105             <groupId>velocity-tools</groupId>
106             <artifactId>velocity-tools-generic</artifactId>
107             <version>1.2</version>
108         </dependency>
109         <!-- 用於加解密 -->
110         <dependency>
111             <groupId>commons-codec</groupId>
112             <artifactId>commons-codec</artifactId>
113             <version>1.7</version>
114         </dependency>
115         <dependency>
116             <groupId>org.bouncycastle</groupId>
117             <artifactId>bcprov-jdk15on</artifactId>
118             <version>1.47</version>
119         </dependency>
120         <!-- 集合工具類 -->
121         <dependency>
122             <groupId>org.apache.commons</groupId>
123             <artifactId>commons-collections4</artifactId>
124             <version>4.0</version>
125         </dependency>
126         <!-- http -->
127         <dependency>
128             <groupId>org.apache.httpcomponents</groupId>
129             <artifactId>httpclient</artifactId>
130             <version>4.2.6</version>
131         </dependency>
132     </dependencies>
133 </project>
View Code

註意:在上一章的基礎上做了以下幾點修改

  • 添加了<parent>標簽,用來指定父模塊,該標簽內有父模塊的坐標(三要素:groupId/artifactId/version)
  • 子模塊不需要再有版本號了,由父模塊來指定就好
  • 將子模塊中下邊這一塊兒代碼也刪掉(因為在父模塊中已經指定了)
    <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        </properties>

建議:

  • "子模塊的groupId"設為"父模塊的groupId.父模塊的artifactId"
  • "子模塊的artifactId"設為"父模塊的artifactId-子模塊的的名稱","父模塊的artifactId-子模塊的的名稱"也就是子模塊的項目名
  • 無論父模塊還是子模塊,建議同一個pom.xml文件中的artifactId與name標簽內容相同

這幾點建議,在我們編寫和部署項目的時候都一目瞭然;以上幾點建議,請對照著以上兩個pom.xml文件對號入座。

2.2.3、在ssmm0的文件夾中,即父模塊pom.xml所在的文件夾中運行命令視窗,執行"mvn clean compile"命令

2.2.4、編譯成功後,將項目ssmm0以maven項目引入eclipse(具體方法:見第一章)

引入的項目結構如下:

註意:

  • 以上第一個框處的內容是ssmm0-ssmm編譯出來的
  • 第二個紅框正好印證了"父模塊的artifactId-子模塊的的名稱"也就是子模塊的項目名這句

2.2.5、運行ssmm項目,進行測試

這樣,就建立起了一個maven的父子模塊項目了。

註:若以後再增加一個新的模塊該怎麼做?

1)我們在父模塊的pom.xml文件中添加<module>

2)在ssmm0文件夾下手工創建一個字maven項目(創建方式見第一章),假設為ssmm2,ssmm2的pom.xml文件類似於ssmm子項目的pom.xml即可

3)在ssmm2文件夾中,打開命令視窗,執行"mvn compile"

4)將ssmm2引入eclipse

5)用eclipse的maven插件編譯在ssmm0上執行:"Run as"-->"Maven build"-->"clean compile"

這樣,就新建了一個子項目了。

針對maven這一塊有幾點建議:(很重要)

  • 安裝maven後,最好在M2_HOME/conf/setting.xml文件添加如下代碼,將之後項目中用到的jar包全部下載到下邊的文件夾中(當然,在修改setting.xml文件時,最好先複製一份最備份),防止C盤撐爆。
    <localRepository>E:/Java/mavenLocalRepository</localRepository>
  • 在實際使用中,我們會架設私服(一般採用nexus),這樣做主要是為了加快jar的下載速度,之後需要在父pom.xml文件中指定私服的位置
       <!-- nexus -->
        <repositories>
            <repository>
                <id>xxx-Nexus</id>
                <name>xxx Maven Repository</name>
                <url>http://xxx.com/nexus/</url>
            </repository>
        </repositories>
    View Code

    一個<repository>標簽就是一個私服,可以加多個私服。

  • 在實際使用中,我們會在父pom.xml文件中加入一個依賴管理池<dependencyManagement>,在這個池中指定了jar的版本號<version>和範圍<scope>,之後在子項目中實際引入jar的坐標的時候,就不需要寫<version>標簽和<scope>了;當然,這樣做,也可以保證在整個項目中,我們使用的同一個jar都是同一個版本;同時,需要指出的是,為了子模塊重覆代碼的減少,在父模塊處,會先引入一些所有子模塊都會使用的jar(例如:log4j等),這樣在子項目中就不需要再引入這些jar了。這裡給出父pom.xml與子項目ssmm的pom.xml的完整版。對著代碼,理解一下這一條。
      1 <?xml version="1.0" encoding="UTF-8"?>
      2 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      3     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
      4 
      5     <modelVersion>4.0.0</modelVersion>
      6 
      7     <groupId>com.xxx</groupId>
      8     <artifactId>ssmm0</artifactId>
      9     <version>1.0-SNAPSHOT</version>
     10 
     11     <name>ssmm0</name>
     12     <packaging>pom</packaging><!-- 父模塊 -->
     13 
     14     <!-- 管理子模塊 -->
     15     <modules>
     16         <module>ssmm</module>
     17     </modules>
     18 
     19     <properties>
     20         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
     21         <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
     22     </properties>
     23 
     24     <!-- dependencyManagement不會引入實際的依賴,只是作為一個依賴池,供其和其子類使用 -->
     25     <dependencyManagement>
     26         <dependencies>
     27             <!-- json -->
     28             <dependency>
     29                 <groupId>com.alibaba</groupId>
     30                 <artifactId>fastjson</artifactId>
     31                 <version>1.1.39</version>
     32             </dependency>
     33             <!-- servlet -->
     34             <dependency>
     35                 <groupId>javax.servlet</groupId>
     36                 <artifactId>javax.servlet-api</artifactId>
     37                 <version>3.0.1</version>
     38                 <scope>provided</scope>
     39             </dependency>
     40             <!-- spring -->
     41             <dependency>
     42                 <groupId>org.springframework</groupId>
     43                 <artifactId>spring-core</artifactId>
     44                 <version>3.2.6.RELEASE</version>
     45             </dependency>
     46             <dependency>
     47                 <groupId>org.springframework</groupId>
     48                 <artifactId>spring-beans</artifactId>
     49                 <version>3.2.6.RELEASE</version>
     50             </dependency>
     51             <dependency>
     52                 <groupId>org.springframework</groupId>
     53                 <artifactId>spring-context</artifactId>
     54                 <version>3.2.6.RELEASE</version>
     55             </dependency>
     56             <dependency>
     57                 <groupId>org.springframework</groupId>
     58                 <artifactId>spring-web</artifactId>
     59                 <version>3.2.6.RELEASE</version>
     60             </dependency>
     61             <dependency>
     62                 <groupId>org.springframework</groupId>
     63                 <artifactId>spring-webmvc</artifactId>
     64                 <version>3.2.6.RELEASE</version>
     65             </dependency>
     66             <!-- 這個是使用velocity的必備包 -->
     67             <dependency>
     68                 <groupId>org.springframework</	   
    
    
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 樣式表有三種方式:內嵌樣式(inline Style) :是寫在Tag裡面的,內嵌樣式只對所有的Tag有效。 (也稱作“內聯樣式”)內部樣式(internal Style Sheet):是寫在HTML的裡面的,內部樣式只對所在的網頁有效。外部樣式表(External Style Sheet):如果很...
  • [1]屬性 [2]方法 [3]tips
  • 不造你有沒有這樣把js數據類型分類,不造你是否知道各種數據類型是怎樣賦值怎樣傳遞的,所有的不造,看了這篇就能懂了,保證小學生即可懂!
  • 基於jQuery滑鼠點擊水波動畫豎直導航代碼。這是一款基於jQuery+CSS3實現的帶動畫效果的豎直導航欄特效。效果圖如下:線上預覽源碼下載實現的代碼。html代碼: 網站首頁 關於我們 產品中心 成功案例 ...
  • DOM是前端編程中一個非常重要的部分,我們在動態修改頁面的樣式、內容、添加頁面動畫以及為頁面元素綁定事件時,本質都是在操作DOM。DOM並不是JS語言的一個部分,我們通過JAVA、PHP等語言抓取網頁內容時需要對網頁進行解析並拿到我們感興趣的那部分內容,這時其實也是在操作DOM。當然在前端領域,我們...
  • 回到目錄Lind.DDD.Authorization是Lind.DDD框架的組成部分,之所以把它封裝到框架里,原因就是它的通用性,幾乎在任何一個系統中,都少不了用戶授權功能,用戶授權對於任何一個系統來說都是必要的,像管理型的頁面都需要用戶先去登陸,然後拿到憑證,才可以進行訪問,這在MVC和WebAp...
  • 在Java軟體的使用過程中,有時會莫名的出現奇怪的問題。而這些問題常常無法使用日誌信息定位,這時我們就需要通過查看進程內部線程的堆棧調用關係來分析問題出在哪裡。 舉個例子,當我們在做某個操作時,莫名的會彈出多個警告框,其中有些信息是正常的,有些則不是。對於這些錯誤的警告信息,我們該如何定位是哪...
  • wiringpi2顯然也把i2c驅動帶給了Python,手頭上正巧有一個DS3231的模塊,上邊帶了一個DS3231 RTC(實時時鐘),與一片24C32,兩個晶元均為iic匯流排設備,與樹莓派接線如下: 也就是VCC GND SDA SCL四個腳分別接到樹莓派的1(3.3v)、9(0v)、3(SDA...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...