MyEclipse的多模塊Maven web(ssm框架整合)

来源:https://www.cnblogs.com/1214804270hacker/archive/2018/04/08/8748027.html
-Advertisement-
Play Games

Maven的多模塊可以讓項目結構更明確,提高功能的內聚,降低項目的耦合度,真正的體現出分層這一概念。 我們在操作中,要明白為什麼這樣做,要瞭解到更深的層次,這樣,我們就不限於個別軟體了。 話不多說,直入主題: 如果對Maven還不夠熟悉,請看該博客:Maven基礎 整個項目做完之後的結構是這樣的: ...


  Maven的多模塊可以讓項目結構更明確,提高功能的內聚,降低項目的耦合度,真正的體現出分層這一概念。

  我們在操作中,要明白為什麼這樣做,要瞭解到更深的層次,這樣,我們就不限於個別軟體了。

  話不多說,直入主題

  如果對Maven還不夠熟悉,請看該博客:Maven基礎

  整個項目做完之後的結構是這樣的:

  

  

  在開始之前我放出這兩張圖是maven多模塊項目做完後的目錄結構,以免大家被eclipse的結構迷惑了。

  首先,新建一個maven項目,如圖:

  

  選project,註意是Create a simple project,然後特別註意,root目錄的聚合模塊的packing是pom!!!

  完後在該maven項目上新建模塊:

  

  在這裡,service層使用簡單的maven-archetype-quickstart即可,packing使用jar類型,web層則使用maven-archetype-webapp的web項目,packing使用war類型。在這裡,jar類型是為了讓其他項目引用更方便,而war類型是為了能在伺服器部署它。

  結構說明

  到了這一步,我們已經將這些模塊建好了,接下來我要深入一下項目結構,以及多模塊的原理,然後我們再配置pom文件。

  

  這是一個項目大概運行機制,ssm-integration作為聚合父級項目,就是為了管理其他子項目(模塊),多模塊就是基於聚合父級項目的。子模塊service是對數據處理的模塊,在這裡是ssm框架,那麼它負責完成對資料庫的操作的封裝(大概結構,具體不細說),然後對外暴露一個介面供web模塊調用即可。也就是當web模塊引用了ssm-service.jar之後,供web項目調用的只有你對外暴露的介面,這就真正實現分層。而web模塊,只負責servlet、視圖模型、前端頁面和一些簡單的邏輯,需要時調用ssm-service.jar的介面方法就行了。當對項目進行部署時,只需部署ssm-web即可,因為ssm-integration僅僅負責管理,你可以將它理解為承載著多模塊的大框架,而ssm-service已經打包給ssm-web了(ssm-web裡面已經有ssm-service了)。

  pom.xml分析

  在這之前,我聲明一下,聚合和繼承是可以分開的,只是大家想方便一下,所以統稱為父項目。

  我們開始看pom的配置,首先時父項目的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/xsd/maven-4.0.0.xsd">
  4     <modelVersion>4.0.0</modelVersion>
  5     <groupId>cn.zuoyu.ssm</groupId>
  6     <artifactId>ssm-integration</artifactId>
  7     <version>0.0.1-SNAPSHOT</version>
  8     <packaging>pom</packaging>
  9     <name>ssm-integration</name>
 10     <description>spring&amp;springMVC&amp;mybatis的整合</description>
 11 
 12     <modules>
 13         <module>ssm-service</module>
 14         <module>ssm-controller Maven Webapp</module>
 15     </modules>
 16 
 17     <properties>
 18         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 19         <spring.version>4.3.8.RELEASE</spring.version>
 20     </properties>
 21 
 22     <build>
 23         <pluginManagement>
 24             <plugins>
 25                 <!-- 編譯插件 -->
 26                 <plugin>
 27                     <groupId>org.apache.maven.plugins</groupId>
 28                     <artifactId>maven-compiler-plugin</artifactId>
 29                     <version>2.3.2</version>
 30                     <configuration>
 31                         <source>1.8</source>
 32                         <target>1.8</target>
 33                     </configuration>
 34                 </plugin>
 35 
 36                 <!-- 用UTF-8編碼處理資源文件 -->
 37                 <plugin>
 38                     <groupId>org.apache.maven.plugins</groupId>
 39                     <artifactId>maven-resources-plugin</artifactId>
 40                     <version>2.6</version>
 41                     <configuration>
 42                         <encoding>UTF-8</encoding>
 43                     </configuration>
 44                 </plugin>
 45             </plugins>
 46         </pluginManagement>
 47         <!-- <resources>
 48                 <!--資源位置配置-->
 49             <resource>
 50                 <directory>src/main/java</directory>
 51                 <includes>
 52                     <include>**/*.xml</include>
 53                 </includes>
 54             </resource>
 55             <!--指定資源的位置-->
 56             <resource>
 57                 <directory>src/main/resources</directory>
 58             </resource>
 59         </resources> -->
 60     </build>
 61 
 62 
 63     <dependencyManagement>
 64         <dependencies>
 65             <!-- 單元測試 -->
 66             <dependency>
 67                 <groupId>junit</groupId>
 68                 <artifactId>junit</artifactId>
 69                 <version>4.12</version>
 70                 <scope>test</scope>
 71             </dependency>
 72             <!-- spring核心包 -->
 73             <dependency>
 74                 <groupId>org.springframework</groupId>
 75                 <artifactId>spring-core</artifactId>
 76                 <version>${spring.version}</version>
 77             </dependency>
 78 
 79             <!-- 掃描用包 -->
 80             <dependency>
 81                 <groupId>org.springframework</groupId>
 82                 <artifactId>spring-context</artifactId>
 83                 <version>${spring.version}</version>
 84             </dependency>
 85 
 86             <!-- 緩存掃描用包 -->
 87             <dependency>
 88                 <groupId>org.springframework</groupId>
 89                 <artifactId>spring-context-support</artifactId>
 90                 <version>${spring.version}</version>
 91             </dependency>
 92 
 93             <!-- bean支持 -->
 94             <dependency>
 95                 <groupId>org.springframework</groupId>
 96                 <artifactId>spring-beans</artifactId>
 97                 <version>${spring.version}</version>
 98             </dependency>
 99     </dependencyManagement>
100 </project>

  在這裡,<modules>xxx<modules>是將需要管理的模塊放進去,放進去的模塊歸該聚合項目管理。例如<pluginManagement>xxx</pluginManagement>或<dependencyManagement>xxx</dependencyManagement>是父類里獨有的,為的是統一資源包,方便管理。
  

   子類pom.xml分析

  看一下子類的代碼,以web模塊為例

  

 1 <?xml version="1.0"?>
 2 <project
 3     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
 4     xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 5     <modelVersion>4.0.0</modelVersion>
 6     <parent>
 7         <groupId>cn.zuoyu.ssm</groupId>
 8         <artifactId>ssm-integration</artifactId>
 9         <version>0.0.1-SNAPSHOT</version>
10     </parent>
11     <artifactId>ssm-controller</artifactId>
12     <packaging>war</packaging>
13     <name>ssm-controller</name>
14     <url>http://maven.apache.org</url>
15 
16 
17     <dependencies>
18 
19         <dependency>
20             <groupId>junit</groupId>
21             <artifactId>junit</artifactId>
22         </dependency>
23         <!-- springMVC核心包 -->
24         <dependency>
25             <groupId>org.springframework</groupId>
26             <artifactId>spring-webmvc</artifactId>
27         </dependency>
28 
29         <!-- jstl支持 -->
30         <dependency>
31             <groupId>jstl</groupId>
32             <artifactId>jstl</artifactId>
33         </dependency>
34 
35         <dependency>
36             <groupId>org.apache.taglibs</groupId>
37             <artifactId>taglibs-standard-impl</artifactId>
38         </dependency>
39 
40         <dependency>
41             <groupId>org.apache.taglibs</groupId>
42             <artifactId>taglibs-standard-spec</artifactId>
43         </dependency>
44         
45         <!-- 對service的依賴 -->
46         <dependency>
47             <groupId>${project.groupId}</groupId>
48             <artifactId>ssm-service</artifactId>
49             <version>${project.version}</version>
50         </dependency>
51     </dependencies>
52     <build>
53         <plugins>
54             <!-- 編譯插件 -->
55             <plugin>
56                 <groupId>org.apache.maven.plugins</groupId>
57                 <artifactId>maven-compiler-plugin</artifactId>
58             </plugin>
59 
60             <!-- 編碼設置 -->
61             <plugin>
62                 <groupId>org.apache.maven.plugins</groupId>
63                 <artifactId>maven-resources-plugin</artifactId>
64             </plugin>
65         </plugins>
66         <finalName>ssm-controller</finalName>
67     </build>
68 </project>

  你會發現多了<parent></parent>標簽,這裡面寫的就是它要繼承的父項目。你還會發現項目沒有聲明groupId和version,因為它已經有父項目了,父項目已經管理了它的來源和版本號。你還會發現plugin插件和dependency依賴沒有聲明version,這就是父項目里寫pluginManagement和dependencyManagement的優點,父項目里的這個如果子項目沒有聲明則不會導入該依賴或插件,如果需要,只需聲明groupId和artifactId即可,方便管理。另外,必須將該項目依賴的其他項目的pack引用過來,不然多模塊就失去了意義,根本運行不起來。

   註意:

  在maven多模塊項目里,子項目的classpath共用的。

   部署:

  在IntelliJ IDEA里部署MavenWeb項目和MyEclipse部署是有差異的,MyEclipse要很簡單:

  

  就好了,只部署ssm-web即可。

  到了這一步,還差很關鍵的一部,就是在你運行之前,要保證你的maven倉庫有ssm-service,就是你service層的jar包,不然ssm-web根本找不到ssm-service.jar,所以,我們要這樣:

  

  否則無法運行。

  然後...

  看一下整體結構:

  

 

  就可以運行了...

  若有不對的地方歡迎+感謝評論指出或郵件我  [email protected]

  共同進步

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Python文件處理 Python文件處理 在python中,要對一個文件進行操作,得把文件抽象為Streams流或者說file object或者叫file-like objects。 這樣將文件當作一個流對象來處理就方便多了。Stream對象提供了很多操作方法(如read(),write()等), ...
  • spring MVC框架 一、什麼是spring MVC Spring MVC屬於SpringFrameWork的後續產品,已經融合在Spring Web Flow裡面。Spring 框架提供了構建 Web 應用程式的全功能 MVC 模塊。使用 Spring 可插入的 MVC 架構,從而在使用Spr ...
  • "Java代理設計模式 靜態代理" "Java中的動態代理 調用處理器" 代理設計模式的UML圖: 我將首先介紹Java中的各種代理實現方法 Java代理設計模式 靜態代理 這個例子非常簡單,只有一個方法 的介面 : 測試代碼: 測試輸出: 現在麻煩的是,Jerry的領導因為團隊中的開發者像Jerr ...
  • 1、問題描述與要求 模擬某校九層教學樓的電梯系統。該樓有一個自動電梯,能在每層停留,其中第一層是大樓的進出層,即是電梯的“本壘層”,電梯“空閑”時,將來到該層候命。 電梯一共有七個狀態,即正在開門(Opening)、已開門(Opened)、正在關門(Closing)、已關門(Closed)、等待(W ...
  • 由於教程是圍繞著文件打開做的錯誤處理,所以先記錄幾個用於文件處理的一些函數,fopen 用於打開一個文件;file_exists 用於檢查目錄是否存在;fclose( $變數 )用於指定關閉打開的文件; PHP處理錯誤的幾種方式:die()語句;自定義錯誤和錯誤觸發器;錯誤日誌; die()語句: ...
  • 在對比醫院業務數據中的各類藥品價格的時候,面對著成千上百種的藥品。因而想到使用爬蟲來自動獲取網上的藥品價格,保存下來導入資料庫中就可以方便地比較院方的藥品採購價格了。 通過百度搜索“藥品價格查詢”,在眾多的網站中,這裡選擇了藥價查詢網(http://www.china-yao.com/),主要是因為 ...
  • 採用ID3演算法 (信息熵:H(X)=−∑i=0np(xi)log2p(xi)) 下載一個決策樹可視化軟體:Graphviz (註意環境變數Path加:C:\Program Files (x86)\Graphviz2.38\bin) 代碼: 導入需要用到的庫: 讀取表格: 這裡一些數據(屬性),決定一 ...
  • 1.修改tp5/application/index/controller/Index.php內容。 2.修改tp5/application/index/view/index/index.html頁面內容。 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...