我的编程空间,编程开发者的网络收藏夹
学习永远不晚

构建Maven多模块项目的方法

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

构建Maven多模块项目的方法

构建Maven多模块项目

JavaWeb开发一般都会进行分层开发,通常分为

  • model,模型层
  • dao,数据访问层
  • service,业务逻辑层
  • web,表现层

分层后,各层职责明确,后期维护起来也会容易一些。接下来我们就是使用Maven来构建以上各层,即构建一个Maven多模块项目,项目目录结构如下所示。

在这里插入图片描述

创建父模块

执行命令:mvn -B archetype:generate -DgroupId=com.jepcc.app -DartifactId=demo -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4,得到一个新项目。

在这里插入图片描述

接下来作如下处理:

  • 删除class="lazy" data-src文件夹
  • 修改demo/pom.xml文件

<packaging>标签在没有指明的情况下默认是jar,这里将其修改为pom,表示模块是一个可以被继承的模块。

在这里插入图片描述 

创建子模块:model层

进入demo目录,执行命令:mvn -B archetype:generate -DgroupId=com.jepcc.app -DartifactId=model -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4,在demo目录下生成了model目录,model目录里包含了class="lazy" data-src目录和pom.xml文件。

在这里插入图片描述

且demo/pom.xml里自动新增了以下内容,


<modules>  
	<module>model</module>
</modules>

接下来做如下处理: 修改model/pom.xml文件

  • 删除<groupId>com.jepcc.app</groupId><version>1.0-SNAPSHOT</version>
  • 因为groupId和version会继承自父模块的groupId和version。
  • 增加<packaging>jar</packaging>
  • 将打包方式设置为jar。

在这里插入图片描述

创建子模块:dao模块

在demo目录下,执行命令:mvn -B archetype:generate -DgroupId=com.jepcc.app -DartifactId=dao -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4,在demo目录下生成了dao目录,dao目录里包含了class="lazy" data-src目录和pom.xml。

在这里插入图片描述

且demo/pom.xml里自动新增了内容,如下,


<modules>  
	<module>model</module>
    <module>dao</module>
 </modules>

接下来做如下处理:

修改 dao/pom.xml

删除<groupId>com.jepcc.app</groupId><version>1.0-SNAPSHOT</version>
因为groupId和version会继承自父模块的groupId和version。

增加<packaging>jar</packaging>
将打包方式设置为jar。增加依赖
增加对model模块的依赖


<dependency>
  <groupId>com.jepcc.app</groupId>
  <artifactId>model</artifactId>
  <version>${project.version}</version>
</dependency>

在这里插入图片描述

创建子模块:service层

在demo目录下,执行命令:mvn -B archetype:generate -DgroupId=com.jepcc.app -DartifactId=service -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4,在demo目录下生成service目录,service目录里包含class="lazy" data-src目录和pom.xml文件。

在这里插入图片描述

且demo/pom.xml文件自动新增内容,如下,


<modules>  
	<module>model</module>
    <module>dao</module>
    <module>service</module>
</modules>

接下来作如下处理:

修改 service/pom.xml

删除<groupId>com.jepcc.app</groupId><version>1.0-SNAPSHOT</version>
因为groupId和version会继承自父模块的groupId和version。

增加<packaging>jar</packaging>
将打包方式设置为jar。

增加依赖
service 层依赖dao层和model层,但我们只需要添加dao层,因为dao模块中已经添加了对model模块的依赖。


<dependency>
  <groupId>com.jepcc.app</groupId>
  <artifactId>dao</artifactId>
  <version>${project.version}</version>
</dependency>

创建子模块:web层

在demo目录下执行命令:mvn -B archetype:generate -DgroupId=com.jepcc.app -DartifactId=web -DarchetypeArtifactId=maven-archetype-webapp -DarchetypeVersion=1.4,在demo目录下生成web目录,web目录包含class="lazy" data-src目录和pom.xml。web/class="lazy" data-src/main/webapp/WEB-INF目录下生成了web.xml。
web/class="lazy" data-src/main/webapp目录下生成了简单的index.jsp,如下,


<html>
<body>
<h2>Hello World!</h2>
</body>
</html>

在这里插入图片描述

且demo/pom.xml自动新增内容,如下,


<modules>  
	<module>model</module>
    <module>dao</module>
    <module>service</module>
    <module>web</module>
</modules>

接下来作如下处理:

  • 修改 web/pom.xml
  • 删除<groupId>com.jepcc.app</groupId><version>1.0-SNAPSHOT</version>
  • 因为groupId和version会继承自父模块的groupId和version。
  • 增加依赖
  • service 层依赖dao层和model层,但我们只需要添加dao层,因为dao模块中已经添加了对model模块的依赖。

<dependency>
  <groupId>com.jepcc.app</groupId>
  <artifactId>service</artifactId>
  <version>${project.version}</version>
</dependency>

注意哈,web层的打包方式是war!!!

编译运行项目

web模块添加jetty插件
经过以上过程,相关模块全部创建完成,怎么运行起来呢?由于最终运行的是web模块,所以我们对该模块添加jetty支持,方便测试运行,修改web模块的pom.xml,


<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <artifactId>demo</artifactId>
    <groupId>com.jepcc.app</groupId>
    <version>1.0-SNAPSHOT</version>
  </parent>


  <artifactId>web</artifactId>
  <packaging>war</packaging>

  <name>web Maven Webapp</name>
  <!-- FIXME change it to the project's website -->
  <url>http://www.example.com</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>com.jepcc.app</groupId>
      <artifactId>service</artifactId>
      <version>${project.version}</version>
    </dependency>
  </dependencies>

  <build>
    <finalName>web</finalName>
    <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
      <plugins>
<!--        配置Jetty插件-->
        <plugin>
          <groupId>org.mortbay.jetty</groupId>
          <artifactId>maven-jetty-plugin</artifactId>
        </plugin>
        <plugin>
          <artifactId>maven-clean-plugin</artifactId>
          <version>3.1.0</version>
        </plugin>
        <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
        <plugin>
          <artifactId>maven-resources-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.8.0</version>
        </plugin>
        <plugin>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>2.22.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-war-plugin</artifactId>
          <version>3.2.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-install-plugin</artifactId>
          <version>2.5.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-deploy-plugin</artifactId>
          <version>2.8.2</version>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>
</project>

进入demo目录,执行命令mvn clean install,完成模块构建。

在这里插入图片描述

构建完成后,web目录下多出了target目录,里面包含web.war

在这里插入图片描述

进入web目录,执行命令:mvn jetty:run,启动jetty。

在这里插入图片描述

打开浏览器访问网址:http://localhost:8080/web/

在这里插入图片描述 

Maven相关特性

每个子模块都有自己的pom.xml文件,这就意味着每个子模块都有可以添加自己的依赖,这就可能造成一个相同的依赖每个模块都要添加一次,而且添加的版本可能不一致,这会造成项目混乱、导致运行时的各种问题。
所以,就应该有个父模块去统一管理所有的jar包,其他子模块去引用父模块就好了,子模块就不需要重复去定义依赖。

父模块的配置

父模块有两个特点:

  • 父模块中没有代码,只有pom.xml文件,用来管理所有依赖及共同配置
  • 父模块pom.xml中的<packaging>标签必须设置为pom

<groupId>com.jepcc.app</groupId>
<artifactId>demo</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>

父模块聚合子模块

父模块在pom.xml中通过<modules><module>声明需要聚合的子模块。


<modules>
  <module>model</module>
  <module>dao</module>
  <module>service</module>
  <module>web</module>
</modules>

父模块统一管理依赖包

父模块的pom.xml通过<dependencyManagement>来统一管理所有jar包及其版本,这样子模块要引用一个依赖时,就不需要在自己的pom.xml里显式列出版本号。因为Maven会沿着父子层次往上走,直到找到拥有dependencyManagement标签的模块,最终确定依赖包对应的版本,并完成加载。
使用<dependencyManagement>来统一管理依赖的版本号,可以确保各个依赖的版本是一致的。
关于<dependencyManagement><dependencies>,二者有如下区别:

  • 对于<dependencyManagement>,只是在父模块中声明依赖,而不实现引入,因此子模块需要显式声明所需要的依赖,否则子模块是不会从父模块中继承下来的。
  • 当子模块显式声明依赖且没有指定版本,子模块会从父模块中继承依赖;当子模块显式声明依赖且指定版本号,Maven会使用子模块中的指定版本。
  • 对于<dependencies>,即使子模块中不写依赖,子模块依然会从父模块中继承所有依赖。

子模块在pom.xml中声明父模块

子模块在自己的pom.xml中通过<parent>声明父模块。


<parent>
  <artifactId>demo</artifactId>
  <groupId>com.jepcc.app</groupId>
  <version>1.0-SNAPSHOT</version>
</parent>

参考文章

使用Maven构建多模块项目

到此这篇关于构建Maven多模块项目的方法的文章就介绍到这了,更多相关Maven多模块项目内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

构建Maven多模块项目的方法

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

详解使用Maven构建多模块项目(图文)

Maven多模块项目,适用于一些比较大的项目,通过合理的模块拆分,实现代码的复用,便于维护和管理。尤其是一些开源框架,也是采用多模块的方式,提供插件集成,用户可以根据需要配置指定的模块。项目结构如下:     test-hd-parent
2023-05-31

maven多模块项目怎么搭建

要搭建一个Maven多模块项目,可以按照以下步骤进行:创建一个父模块:首先,在你的项目目录下创建一个空的文件夹作为父模块的根目录。在根目录下创建一个pom.xml文件,作为父模块的项目描述文件。在pom.xml文件中定义项目的基本信息和依赖
2023-10-26

IDEA搭建Maven模块化项目的实现方法

今天小编给大家分享的是IDEA搭建Maven模块化项目的实现方法,相信很多人都不太了解,为了让大家更加了解,所以给大家总结了以下内容,一起往下看吧。一定会有所收获的哦。目录1.前言2. 软硬件环境3.项目搭建3.1.创建 SpringBoo
2023-07-06

SpringBoot创建maven多模块项目实战代码

工作中一直都是一个人奋战一人一个项目,使用maven管理,看这个也挺好,但是总感觉没有充分发挥maven的功能,于是研究了一下这个,网上关于这个的文章很多,虽然不是很好,但我从中收获了很多,在这集百家所长,写一份实战记录,大家跟着我一块做吧
2023-05-31

使用Gradle构建多模块项目

本文将从无到有创建一个用 Gradle 构建的多模块 Spring Boot 项目,JDK 版本为8,IDEA 版本为 2022.3.1 。

IntelliJ IDEA创建maven多模块项目(图文教程)

项目主要分成3个模块,wms-root为父模块,wms-core和wms-app(webapp类型的模块)为子模块。一、Parent Project,创建wms-root父模块。1、依次点击:File->New->Project2、左侧面板
2023-05-31

IDEA搭建Maven模块化项目的实现

本文主要介绍了IDEA搭建Maven模块化项目的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-05-20

idea怎么导入maven多模块项目

要将Idea导入Maven多模块项目,可以按照以下步骤进行操作:打开Idea,点击“File”菜单,选择“Open”,选择要导入的项目的根目录。选择项目根目录后,点击“Open”按钮。在Idea的左侧面板中,选择项目根目录下的`pom.
2023-10-26

spring boot多模块项目怎么利用Maven进行搭建

今天就跟大家聊聊有关spring boot多模块项目怎么利用Maven进行搭建,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。备注:所有项目都在idea中创建1.idea创建maven
2023-05-31

Maven学习教程之搭建多模块企业级项目

首先,前面几次学习已经学会了安装maven,如何创建maven项目等,最近的学习,终于有点进展了,搭建一下企业级多模块项目。好了,废话不多说,具体如下:首先新建一个maven项目,pom.xml的文件如下:搭建多模块项目,必须要有一个pac
2023-05-31

如何以新的方式构建 Golang 模块和项目结构

哈喽!今天心血来潮给大家带来了《如何以新的方式构建 Golang 模块和项目结构》,想必大家应该对Golang都不陌生吧,那么阅读本文就都不会很困难,以下内容主要涉及到,若是你正在学习Golang,千万别错过这篇文章~希望能帮助到你!问题内
如何以新的方式构建 Golang 模块和项目结构
2024-04-05

探析在Spring Boot中为可扩展微服务构建多模块项目的方法

随着软件应用程序复杂程度的不断提升,对可扩展性、模块化以及清晰度的管理变得极为关键。

SpringCloud怎么搭建一个多模块项目

这篇文章将为大家详细讲解有关SpringCloud怎么搭建一个多模块项目,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、新建一个父maven project模块File->new->other->mav
2023-06-15

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录