zoukankan      html  css  js  c++  java
  • MyEclipse的多模块Maven web(ssm框架整合)

      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,所以,我们要这样:

      

      否则无法运行。

      然后...

      看一下整体结构:

      

      就可以运行了...

      若有不对的地方欢迎+感谢评论指出或邮件我  zuoyuip@qq.com

      共同进步

  • 相关阅读:
    今天光棍节,有新发现
    订购了一台Wp7,来测试一下让程序跑在wp7上吧
    3D场景编辑器 0.1
    新进展
    XXX(脏话)的腾讯,敢给我解释一下么?
    扣扣起司,架构设计(重复造轮子了,发现了MSNLite)
    关于WP7开发,随笔
    关于content管道,让我们继续
    微软,还我Input.Touch模块
    为什么要抛弃content
  • 原文地址:https://www.cnblogs.com/1214804270hacker/p/8748027.html
Copyright © 2011-2022 走看看