zoukankan      html  css  js  c++  java
  • 使用maven构建多模块项目,分块开发

    原文出处http://www.yund.tech/zdetail.html?type=1&id=79dec7c1d56292419acec78afcbc1095    

    作者:jstarseven


      

    在多人使用Maven协作开发项目时,尤其是稍微上点规模的项目,每个RD的工作都细分到具体功能和模块,有些模块甚至还要单独部署。

    我们假设有这样一个商城项目,包括以下几个模块:

    • 商城前台(shop)
    • 管理后台(admin)
    • 数据库交互模块(dao)
    • 通用业务模块(service)
    • 接口模块(api)
    • 通用工具(util)

    其中shop和admin需要单独部署,dao、service、util你可能想要一些经验丰富的人来维护,如果使用一个应用来管理的话,所有的功能和模块都会耦合在一起,所有人都可以随意修改代码,这显然不是我们所期望的。

    而且使用一个应用来管理的话,任何一个点的代码有变更,整个项目就需要重新build,使用模块化开发的另一个好处是如果dao的代码被修改,只需要重新build dao模块就可以了。web模块可以build成war,dao、service、util等可以build成jar,只需要配置好依赖关系,就可以实现模块间的解耦合。这样的设计才是遵循“高内聚,低耦合”设计原则的。

    我们如何进行模块化开发呢?

    我们使用上面的例子进行演示,先进行合理的优化,我们希望dao和service作为通用的底层工具来使用,把它们合并成一个核心模块(core),build成core.jar,简单的Maven模块化项目结构如下:

    ---------- mall         //顶级项目
       |------ pom.xml      //packaging = pom
       |------ mall-util    //通用工具
       |  |--- pom.xml      //packaging = jar
       |------ mall-core    //核心模块
       |  |--- pom.xml      //packaging = jar
       |------ mall-web-api //接口模块
       |  |--- pom.xml      //packaging = war
       |------ mall-web-admin//管理后台
       |  |--- pom.xml      //packaging = war
       |------ mall-web-shop//商城前台
       |  |--- pom.xml      //packaging = war
    

    这些模块中api、admin、shop均是可以单独部署的web应用,相互之间没有依赖关系,但都依赖于core模块,而core模块依赖于util模块。接下来我们按照上述确定的结构来搭建项目结构。

    使用IDEA来创建Maven多模块项目

    一、创建一个普通Maven项目

    1. New Project

    image

    1. 填写基本信息,这里使用ipr作为项目描述文件

    image

    1. 普通Maven项目不需要使用Maven模板搭建

    image

    二、给Maven项目添加模块

    1. New Module

    image

    1. 填写基本信息,jar项目同样不需要使用Maven模板搭建

    image

    1. 这个时候就可以看到,我们所添加的module已经被引入到parent的pom文件里了
    <groupId>com.mall</groupId>
    <artifactId>mall</artifactId>
    <packaging>pom</packaging> //打包方式为pom
    <version>1.0-SNAPSHOT</version>
    
    <modules>
        <module>mall-util</module>
    </modules>
    1. 变更util模块的构建方式为jar
    <parent>
        <artifactId>mall</artifactId>
        <groupId>com.mall</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    
    <packaging>jar</packaging> //打包方式为jar
    <artifactId>mall-util</artifactId>

    三、给Maven项目添加web模块

    1. 创建一个module,并选中“Create from archetype”选项,同时maven模板选择webapp

    image

    1. 接下来耐心的等待maven帮你创建好module,模块信息已经被添加
    <modules>
        <module>mall-util</module>
        <module>mall-web-admin</module>
    </modules>

    目录结构如下:

    image

    pom:

    <parent>
        <artifactId>mall</artifactId>
        <groupId>com.mall</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <artifactId>mall-web-admin</artifactId>
    <packaging>war</packaging>
    <name>mall-web-admin</name>
    <url>https://github.com/beiyoufx</url>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <build>
        <finalName>mall-web-admin</finalName>
    </build>

    四、添加模块间的依赖关系

    1. 增加core与util的依赖

    image

    1. 增加admin与core的依赖关系

    image

    admin与core、util的依赖链

    image

    多模块项目的构建与发布

    打包

    image

    所有在root项目中进行的构建都会传递到模块中,例如root中的package会打包整个项目,当文件有变动时会进行重新聚合,其他命令同理。模块中的package只会打包当前模块。

    使用source:jar命令会将源码打包。

    发布

    web模块可以单独部署也可聚合部署。

      


     -END-

  • 相关阅读:
    一起谈.NET技术,Silverlight中二维变换详解 狼人:
    一起谈.NET技术,通过16道练习学习Linq和Lambda 狼人:
    一起谈.NET技术,技巧:使用可扩展对象模式扩展HttpApplication 狼人:
    一起谈.NET技术,ASP.NET的运行原理与运行机制 狼人:
    一起谈.NET技术,.NET远程处理框架详解 狼人:
    一起谈.NET技术,从原理来看Silverlight 4的架构 狼人:
    一起谈.NET技术,ASP.NET MVC中对Model进行分步验证的解决方法 狼人:
    一起谈.NET技术,解决编程中序列化问题 狼人:
    一起谈.NET技术,asp.net控件开发基础(2) 狼人:
    一起谈.NET技术,asp.net控件开发基础(1) 狼人:
  • 原文地址:https://www.cnblogs.com/jstarseven/p/9109512.html
Copyright © 2011-2022 走看看