构建Maven多模块项目的方法

目录
  • 构建Maven多模块项目
    • 创建父模块
    • 创建子模块:model层
    • 创建子模块:dao模块
    • 创建子模块:service层
    • 创建子模块:web层
    • 编译运行项目
  • Maven相关特性
    • 父模块的配置
    • 父模块聚合子模块
    • 父模块统一管理依赖包
    • 子模块在pom.xml中声明父模块
  • 参考文章

构建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,得到一个新项目。

接下来作如下处理:

  • 删除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目录里包含了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目录里包含了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目录里包含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目录包含src目录和pom.xml。web/src/main/webapp/WEB-INF目录下生成了web.xml。
web/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多模块项目内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 基于maven使用IDEA创建多模块项目

    鉴于最近学习一个分布式项目的开发,讲一下关于使用IntelliJ IDEA基于Maven创建多模块项目的实际开发,可能有不合适的地方,但是项目是可以跑通的,也请有不足之处,都提出来,一起讨论下. 一. 项目工程目录 首先展示一下,最终整个项目的工程目录: 简单介绍一下目录结构: common-parent为所有项目的父项目,主要用来管理所有项目使用的jar包及其版本. common-utils为公共的工具类项目,继承父项目,它会被打成jar包供其它项目使用. taotao-manager为我们自

  • SpringBoot+Maven 多模块项目的构建、运行、打包实战

    本篇文章主要介绍了SpringBoot+Maven 多模块项目的构建.运行.打包,分享给大家,具体如下: 项目使用的工具: IntelliJ IDEA JDK 1.8 apache-maven-3.3.9 项目的目录: 主项目 springboot-multi 子模块 entity.dao.service.web 一.使用IDEA创建一个SpringBoot项目 : File -> new -> Project 项目名称为springboot-multi 二.删除项目中的src目录,把pom.

  • 详解Maven 搭建spring boot多模块项目(附源码)

    本文介绍了Maven 搭建spring boot多模块项目,分享给大家,具体如下: 备注:所有项目都在idea中创建 1.idea创建maven项目 1-1: 删除src,target目录,只保留pom.xml 1-2: 根目录pom.xml可被子模块继承,因此项目只是demo,未考虑太多性能问题,所以将诸多依赖.都写在根级`pom.xml`,子模块只需继承就可以使用. 1-3: 根级pom.xml文件在附录1 1-4: 依赖模块 mybatis spring-boot相关模块 2.创建子模块(

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

    项目主要分成3个模块,wms-root为父模块,wms-core和wms-app(webapp类型的模块)为子模块. 一.Parent Project,创建wms-root父模块. 1.依次点击:File->New->Project 2.左侧面板选择maven(不要选择Create from archetype选项),如下图,点击Next即可. 3.依次补全如下信息,点击Next 4.输入项目名字.如ModuleProject,我们主要是在这个项目下创建我们的子模块. 5.这样我们就创建好了一

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

    工作中一直都是一个人奋战一人一个项目,使用maven管理,看这个也挺好,但是总感觉没有充分发挥maven的功能,于是研究了一下这个,网上关于这个的文章很多,虽然不是很好,但我从中收获了很多,在这集百家所长,写一份实战记录,大家跟着我一块做吧! 声明:构建多模块不是最难的,难点是如果把多模块打包成一个执行jar. SpringBoot官方推崇的是富jar,也就是jar文件启动项目,所以如果在这里打war包我不具体介绍,如果需要的朋友可以给我留言,我回复. 建议clone项目后,在看教程(有不足的地

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

    Maven多模块项目,适用于一些比较大的项目,通过合理的模块拆分,实现代码的复用,便于维护和管理.尤其是一些开源框架,也是采用多模块的方式,提供插件集成,用户可以根据需要配置指定的模块. 项目结构如下: test-hd-parent (父级) ---pom.xml ---test-hd-api (第三方接口层) ----pom.xml ---test-hd-foundation (基础工具层) ----pom.xml ---test-hd-resource (资源层) ----pom.xml -

  • 构建Maven多模块项目的方法

    目录 构建Maven多模块项目 创建父模块 创建子模块:model层 创建子模块:dao模块 创建子模块:service层 创建子模块:web层 编译运行项目 Maven相关特性 父模块的配置 父模块聚合子模块 父模块统一管理依赖包 子模块在pom.xml中声明父模块 参考文章 构建Maven多模块项目 JavaWeb开发一般都会进行分层开发,通常分为 model,模型层 dao,数据访问层 service,业务逻辑层 web,表现层 分层后,各层职责明确,后期维护起来也会容易一些.接下来我们就

  • IntelliJ IDEA 构建maven多模块工程项目(详细多图)

    食用前须知 本文以a b c 三个模块为例来搭建项目,以达到通俗易懂的初衷 模块a -– 基模块,就是人们常说的parent 模块b -– 其他模块都需要使用的一些工具,比如时间工具,json工具等 模块c -– 项目主要的内容,一般为聚合工程 先简单讲一下maven的一些特点 继承 这个可以理解为java中的继承类似,父类定义的东西,子类如果你想用就拿过来用就可以; 依赖 依赖就相当于我们java中的导包,二者有着异曲同工之妙; 你想用的东西只需要告诉maven它在哪就可以,它会自动帮你找过来

  • springboot+idea+maven 多模块项目搭建的详细过程(连接数据库进行测试)

    创建之前项目之前 记得改一下 maven  提高下载Pom速度 记得 setting 中要改 maven  改成 阿里云的.具体方法 网上查第一步 搭建parents 项目,为maven项目 ,不为springboot 项目 记得修改groupId 第二步 搭建多个子模块, honor-dao   honor-manager   honor-common记得创建 honor-manager 的时候 要把他的gruopId 改成com.honor.manager 这里爆红的原因是 因为 我做到后面

  • Maven搭建springboot项目的方法步骤

    Maven搭建springboot项目 本文是基于Windows 10系统环境,使用Maven搭建springboot项目 Windows 10 apache-maven-3.6.0 IntelliJ IDEA 2018.3.4 x64 一.springboot项目搭建 (1) 新建目录 在某个可用目录下,新建一个文件夹,本文新建目录为 D:\demo\zs200 (2) 创建maven父工程zs200a-parent 填写项目maven坐标 填写项目名称和路径 (2) maven父工程zs20

  • maven多模块项目依赖管理与依赖继承详解

    目录 maven多模块项目依赖管理与依赖继承 1.指定父模块与默认继承 2.依赖管理 关于maven项目依赖继承问题 只需要在父项目中加入 并且把父项目已POM的形式 然后在子项目中以<parent>标签 maven多模块项目依赖管理与依赖继承 1.指定父模块与默认继承 dependencies即使在子项目中不写该依赖项,那么子项目仍然会从父项目中继承该依赖项(全部继承) 父模块的pom <?xml version="1.0" encoding="UTF-8

  • 利用IDEA工具修改Maven多模块项目标识包名全过程记录

    目录 一.背景 二.具备的能力 2.1 IDEA 2.2 Maven多模块项目 三.步骤 3.1 移动包 3.2 选择重构的条件 3.3 清扫战场 3.4 小心毒刺 3.4.1 redis序列化问题 3.4.2 组件扫描 四.其它 一.背景 当我们为甲方服务提供软件开发服务时,需要按照甲方的要求去修改软件的标识,对于Maven项目来说就对应着groupId,一般地写对方公司的域名,如com.example.因此,项目中使用到的原来的代码需要赋予其新的标识. 二.具备的能力 2.1 IDEA ID

  • jenkins构建go及java项目的方法

    写在前面 jenkins作为java的好基友,经历过单体项目时代->集群项目时代->容器集群分布式时代,使用稳定可靠,cpu友好(就泪存有点儿难看),如果有问题就... (当然这种情况不多(_) ) , 至于后期又有了jenkins x(容器版),对于非容器环境这里这里就不介绍啦 然后简略介绍我自己的项目情况吧,说说我的思路:首先我的项目有一个后台mee(java).mee-api(多个,为Java项目)以及gee-api项目(多个,go项目),后台项目暂不集群分布(目前够用), mee-ap

  • 使用maven创建web项目的方法步骤(图文)

    目前做的项目使用的是MAVEN来管理jar包,这也是我第一次接触maven,感觉非常好,再也不用一个一个去添加和下载jar包了,直接在maven配置文件中配置就可以了,maven可以帮助我们自动下载.非常方便.之前比较忙没时间整理,现在整理一下,记录下来,加深印象.当然我们使用maven也只是最基本的,很多其他功能都没有使用到,本篇仅介绍如何创建一个maven项目,不做其他. 环境搭建参考之前一篇博文:http://www.jb51.net/article/131269.htm 下面推荐2个ma

  • IDEA+Maven搭建JavaWeb项目的方法步骤

    目录 前言 1. 项目搭建 2. 配置项目 添加web部署的插件 3. 项目运行 使用Tomact插件运行项目 4. 注意事项 前言 本章节主要内容是描述如何使用maven构建javaweb项目 Maven依赖仓库: https://mvnrepository.com/ Tomcat7插件的命令: https://tomcat.apache.org/maven-plugin-trunk/tomcat7-maven-plugin/plugin-info.html 1. 项目搭建 选择maven模板

随机推荐