Maven多模块化构建项目Demo

       架构入门初探,最近在学习项目架构,觉得有必要记录一些学习心得笔记,供大家学习借鉴,构建自己的项目体系,自身程序员出身,语言表述能力不足,希望慢慢改善吧,闲话少叙,进入正题。


目录

前言

简化技术上的分块,专注于业务上的划分。

步骤

一、构建依赖池dependencies

二、构建父工程parent

三、构建子模块项目common、api、util

四、构建webapp项目

知识点及体会

问题知识点:pom.xml中 dependencies与dependencyManagement的区别

Demo下载地址

QQ群:763774519(Java极客技术部落)

最后,希望我们能共同成长进步吧,翻过这座山他们就会听到你的故事。


 

先来一张项目架构图

Maven多模块化构建项目Demo

接下来一步步教大家如何构建架构


前言

简化技术上的分块,专注于业务上的划分。

  • 构建项目总的依赖jar版本管理,创建依赖池工程 dependencies
  • dao、service 、model 属于技术上依赖的东西,可以统一放在一个模块里,比如一起放到common 里面
  1. 如果是web项目,就直接webapp -> common -> util
  2. 如果集成 api的项目,就直接api -> common -> util 

步骤

一、构建依赖池dependencies

这是一个pom工程,用于统一管理jar版本依赖,创建步骤:

新建项目

Maven多模块化构建项目Demo

点击Next,选择Maven模板 site-simple

Maven多模块化构建项目Demo

Next输入项目名称,包名,点击Finish,完成创建

Maven多模块化构建项目Demo

pom.xml主要内容如下:

<!-- jar版本 -->
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <junit.version>3.8.1</junit.version>
    </properties>
    <!-- 声明依赖池引用 -->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>${junit.version}</version>
                <scope>test</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

二、构建父工程parent

这也是一个pom项目,声明项目从依赖池中引用的jar,子模块继承的主项目,主要创建步骤同上

pom.xml主要内容如下:

<properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.version>0.0.1-SNAPSHOT</project.version>
        <dependencies.version>0.0.1-SNAPSHOT</dependencies.version>
    </properties>
    <dependencyManagement>
        <dependencies>
            <!--依赖池 -->
            <dependency>
                <groupId>com.online</groupId>
                <artifactId>dependencies-frame</artifactId>
                <version>${dependencies.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <!-- 声明依赖池中引用的依赖  全部子项目模块自动继承依赖 -->
    <dependencies>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
        </dependency>  
    </dependencies>

三、构建子模块项目common、api、util

都是maven工程,继承parent工程,创建module工程,创建步骤:

父工程右键新建

Maven多模块化构建项目Demo

点击Next,设置模块名,继续下一步,选择quickstart,点击下一步

Maven多模块化构建项目Demo

设置包名,点击Finish完成创建

pom.xml主要内容,删除警告的部分

<parent>
    <groupId>com.online</groupId>
    <artifactId>parent-frame</artifactId>
    <version>0.0.1-SNAPSHOT</version>
  </parent>
  <artifactId>common-frame</artifactId>
  <name>common-frame</name>
  <url>http://maven.apache.org</url>
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

 

四、构建webapp项目

操作步骤基本同上,不做赘述,选择webapp模板进行操作,完成创建

Maven多模块化构建项目Demo

需要依赖common以及util

pom.xml主要内容

 <parent>
    <groupId>com.online</groupId>
    <artifactId>parent-frame</artifactId>
    <version>0.0.1-SNAPSHOT</version>
  </parent>
  <artifactId>webapp-frame</artifactId>
  <packaging>war</packaging>
  <name>webapp-frame Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <dependencies>
        <dependency>
            <groupId>com.online</groupId>
            <artifactId>common-frame</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>com.online</groupId>
            <artifactId>util-frame</artifactId>
            <version>${project.version}</version>
        </dependency>
    </dependencies>

创建完以上步骤后,父工程的pom文件会有以下模块内容

<modules>
        <module>common-frame</module>
        <module>util-frame</module>
        <module>webapp-frame</module>
        <module>api-frame</module>
    </modules>

到这里就已经完成maven多模块化构建了


知识点及体会

        这里是构建过程中遇到的一些问题的记录,也是一些知识的盲点,希望大家能避免这些误区,有的时候我们可能仅仅会使用一些东西,而不理解其中的道理,缺少一些自己的思考,不能形成自己的知识储备,这也是自己所欠缺的技能,与君共勉吧,继续努力,去一点点积累,只有自己实践才能渐渐理解其中的真谛,所以需要我们动手去实践,去编码一些基础的东西,这样才能加深自己的记忆。

问题知识点:pom.xml中 dependencies与dependencyManagement的区别

       在构建依赖池pom项目后,子模块一直出现jar依赖引用不上的情况,花了很长时间,也很费解,逐步解决问题过程中,才了解了以下内容,希望各位不要再踩坑,遇到问题也不要轻言放弃

简单理解如下:

dependencies即使在子项目中不写该依赖项,那么子项目仍然会从父项目中继承该依赖项(全部继承)dependencyManagement里只是声明依赖,并不实现引入,因此子项目需要显示的声明需要用的依赖。如果不在子项目中声明依赖,是不会从父项目中继承下来的;只有在子项目中写了该依赖项,并且没有指定具体版本,才会从父项目中继承该项,并且version和scope都读取自父pom;另外如果子项目中指定了版本号,那么会使用子项目中指定的jar版本。

Demo下载地址

以下是个人的技术交流群,有兴趣一起学习交流的可以加入

QQ群:763774519(Java极客技术部落)

想要源码的可以进群文件下载

或者可以扫一扫关注微信订阅号,回复:maven,获取源码

Maven多模块化构建项目Demo

最后,希望我们能共同成长进步吧,翻过这座山他们就会听到你的故事。