maven 的module介绍

《maven基础》2-创建一个module 上一节创建了一个简单的maven工程,简单的看了一下工程的pom文件。 我们知道开发过程中不可能都在一个project里面开发代码,所以在idea里面,我们会在project里面创建module。实现不同的功能,比如有的是数据持久层,有的是MVC层,有的就是业务逻辑层。 这节课我们创建一个module看一下结果。 idea里面右键可以创建module 系统会默认选择maven类型的文件, 点击下一步 给module命名 命名之后就是下一步下一步 创建成功 这个时候我们看一下工程的po. 阅读详情
AI摘要

本文介绍了Maven多模块项目的概念、优势及基本结构。通过示例展示了如何使用父POM统一配置,子模块继承配置的方式进行依赖管理、构建生命周期控制及代码复用。

在 Maven 项目中,module 是一个非常重要的概念,它允许将一个大的项目拆分成多个更小、更易于管理的部分。每个 module 都是一个独立的 Maven 项目,但它可以被包含在父项目中作为一个构建单元。使用 Maven 的多模块(multi-module)结构,可以更加灵活地组织项目,共享配置,管理依赖关系,并简化构建和部署流程。

Maven 多模块项目的基本结构

一个 Maven 多模块项目通常包含以下部分:

  1. 父 POM(Parent POM):这是一个 Maven 项目对象模型(POM),它作为所有模块的父项目。父 POM 不包含实际的源代码,而是定义了共同的配置,如项目版本、依赖管理、插件管理等。子模块会继承父 POM 中的配置,并可以覆盖或添加额外的配置。

  2. 子模块(Modules):这些是包含实际源代码和资源的 Maven 项目。每个子模块都是一个独立的 Maven 项目,有自己的 pom.xml 文件。这些 pom.xml 文件会引用父 POM 作为它们的父项目,并继承其配置。子模块之间也可以相互依赖,以构建复杂的应用程序。

Maven 多模块项目的优势

  1. 模块化:将大型项目拆分成多个模块,每个模块负责项目的一部分功能,使得项目更加模块化,易于管理和维护。

  2. 依赖管理:在父 POM 中统一管理依赖版本,子模块继承这些依赖而无需重复指定版本,从而避免了版本冲突和依赖地狱。

  3. 构建生命周期:Maven 的多模块项目支持一次性构建所有模块,或者仅构建特定的模块。这简化了构建过程,提高了开发效率。

  4. 插件配置共享:父 POM 中配置的插件和插件配置可以被所有子模块继承,从而减少了重复配置。

  5. 代码复用:通过模块间的依赖关系,可以轻松实现代码的复用,提高开发效率和质量。

示例概述

假设我们正在开发一个名为 MyApp 的应用程序,它包含三个主要部分:

  1. core - 核心功能库,包含业务逻辑和工具类。
  2. web - Web 层,用于处理 HTTP 请求和响应,依赖于 core 模块。
  3. integration-tests - 集成测试模块,用于测试整个应用程序的集成点,依赖于 web 和 core 模块。

项目结构

MyApp/  
|-- pom.xml          # 父POM文件  
|-- core/  
|   |-- src/  
|   |   |-- main/  
|   |   |   |-- java/  
|   |   |       # 源代码  
|   |   |-- resources/  
|   |       # 资源文件  
|   |-- pom.xml      # core模块的POM文件  
|-- web/  
|   |-- src/  
|   |   |-- main/  
|   |   |   |-- java/  
|   |   |   |-- webapp/  
|   |   |       # Web内容  
|   |   |-- resources/  
|   |-- pom.xml      # web模块的POM文件  
|-- integration-tests/  
    |-- src/  
    |   |-- test/  
    |       |-- java/  
    |           # 集成测试代码  
    |-- pom.xml      # integration-tests模块的POM文件

父 POM (MyApp/pom.xml)

<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>  
  
    <groupId>com.example</groupId>  
    <artifactId>MyApp</artifactId>  
    <version>1.0-SNAPSHOT</version>  
    <packaging>pom</packaging>  
  
    <modules>  
        <module>core</module>  
        <module>web</module>  
        <module>integration-tests</module>  
    </modules>  
  
    <!-- 可以在这里定义依赖管理、插件配置等,供子模块继承 -->  
  
</project>

子模块 POM 示例 (core/pom.xml)

<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>  
        <groupId>com.example</groupId>  
        <artifactId>MyApp</artifactId>  
        <version>1.0-SNAPSHOT</version>  
    </parent>  
  
    <artifactId>core</artifactId>  
  
    <!-- 这里可以定义core模块特有的依赖、插件等 -->  
  
</project>

依赖示例

在 web 模块的 pom.xml 文件中,你可能会看到类似下面的依赖声明,它依赖于 core 模块:

<dependencies>  
    <dependency>  
        <groupId>com.example</groupId>  
        <artifactId>core</artifactId>  
        <version>${project.version}</version> <!-- 使用父POM中定义的版本 -->  
    </dependency>  
    <!-- 其他依赖 -->  
</dependencies>

构建

在 MyApp 目录的根级别上运行 Maven 命令(如 mvn clean install)将构建所有列在 <modules> 中的子模块。Maven 会首先构建 core 模块,然后是 web 模块,最后是 integration-tests 模块(如果它有测试依赖)。

注意事项

  • 确保每个子模块的 pom.xml 文件都正确引用了父 POM。
  • 可以在父 POM 中定义共同的依赖版本,子模块可以继承这些版本而无需重复指定。
  • 依赖关系应该是从下到上的。
Maven自定义脚手架(多module模块)+自定义参数 脚手架创建的步骤如下,先创建一个工程,把常用的代码写好,进入工程根目录,进行如下操作:打包模板进入模板目录,修改文件配置如果想让文件中的替换变量生效,需要先修改META-INF.maven/archetype-metadata.xml将对应目录或文件增加 filtered=“true”再使用变量替换对应文件内容部署本地上传仓库mvn deploy下面用一个多模块的项目做演示,包含xml文件,yml文件,和其他文件。 阅读详情

相关推荐

Maven多模块项目搭建指南

也就是说,父工程管理的是所有项目模块的依赖,而不是某一个项目模块的依赖,所以某一个项目模块不需要继承父工程中的所有依赖,这就需要子项目模块向父工程声明需要的依赖即可(声明式依赖)。而此时,父工程实际只需要管理依赖的版本号即可。由于父工程管理依赖的版本号,那么子模块要想继承依赖,只能通过声明式来添加依赖,实际上,子模块中的依赖是继承父工程依赖的版本号;以上写做法,子模块会无条件继承父工程的所有依赖,导致的问题是,本不需要的继承的依赖也会被继承,这就大大增加了项目模块最终打包的大小,也可能未上线埋下了隐患。

禅与计算机程序设计的艺术 7435

Maven之modules详解

所有用Maven管理的真实的项目都应该是分模块的,每个模块都对应着一个pom.xml。它们之间通过继承和聚合(也称作多模块,multi-module)相互关联。那么,为什么要这么做呢?我们明明在开发一个项目,划分模块后,导入Eclipse变成了N个项目,这会带来复杂度,给开发带来不便。 为了解释原因,假设有这样一个项目,很常见的Java Web应用。在这个应用中,我们分了几层: Dao层负责数据库交互,封装了Hibernate交互的类。 Service层处理业务逻辑,放一些Service接口和实现相关.

one-way or another 1万+

【maven】多 module项目搭建

文章目录1. 前言2. 单一 module 项目2.1. IDEA 创建项目2.2. maven 命令创建2.3. maven 项目结构3. 多 module 项目3.1. 创建顶层 module3.2. 添加子 module3.3. module 版本管理4. bom 项目5. 相关链接 1. 前言 本着 “ 干货的定义,往往都是基于某种特定场景 ” 的原则,开篇之前,先来点前戏: 只讲 ma...

仰起嘴角 1296

Maven-modules

父项目构建子模块时,使用标签modules, Maven之modules详解 https://blog.youkuaiyun.com/BUCTOJ/article/details/108851118

weixin_40017062的博客 1953

Spring Boot整合Maven多模块项目搭建:从入门到精通

Maven多模块项目是一种通过父项目管理多个子模块的项目结构,适用于中大型复杂系统。其核心优势包括模块化开发、构建效率高和统一依赖管理。文章详细介绍了多模块项目的创建流程,包括父工程的pom配置、子模块的继承关系,以及模块间的依赖设计。通过接口示例展示了分层架构的实现,并提供了依赖管理、多环境配置等高级技巧。最后以用户注册流程为例,演示了从Controller到Service的完整调用链,为开发复杂系统提供了清晰的架构方案。

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 2354

用户视角下的vfsglobal预约困境:从注册到登录的全流程避坑指南

本文详细解析了vfsglobal签证预约系统从注册到登录的全流程操作,帮助用户避开常见技术陷阱。针对IP限制、DNS解析、浏览器缓存等登录障碍提供实用解决方案,并揭示账号管理的隐藏规则与支付环节的延时处理技巧,助力用户高效完成签证预约。

ol78901234的博客 873

maven module 路径_Maven编译指定的Module

-点击上方蓝色字体,关注我们 Maven构建Java项目时,maven clean install.....相关的命令肯定是常用的,但是Maven在构建多Module项目时,编译指定的子module,本人还是第一次遇到,为此记录下。为此创建一个多Module的Maven项目,项目的pom结构如下: 在父项目的跟路径下,cmd窗口执行mvn clean或mvn ins...

weixin_42471237的博客 2011

全桥LLC谐振变换器设计与双环控制策略详解

LLC谐振变换器作为高频开关电源的核心拓扑,通过谐振腔实现软开关特性,显著提升转换效率(可达96%以上)。其工作原理基于谐振电感、电容的协同作用,当开关频率接近谐振点时实现ZVS/ZCS。在工业电源、电动汽车充电等场景中,电压电流双环控制策略通过引入电流内环和竞争仲裁机制,有效改善动态响应(实测负载跳变时电压跌落减少60%)。数字控制实现时需注意ADC采样同步和PWM更新时序,而谐振参数测量与温升管理则是工程实践的关键。

weixin_29189987的博客 257

maven module 路径_idea构建maven多module项目

前言搭建一个项目,看似简单,但是总会遇到一些奇奇怪怪的问题。新建parent项目新建一个springboot项目或者maven项目都可以,这个无所谓。设置项目的maven仓库和编码。建module在parent项目下新建多个module,新建springboot项目或者maven项目都可以。maven项目自己新建包的时候尽量按照groupId + artifactId的方式,如果artifactI...

weixin_36054159的博客 795

OV5640调试大坑,关于binning、RES分辨率与EV曝光

OV5640在使用binning模式时,必须考虑使用场景,分辨率下降叠加动态范围压缩,会使目标对象细节在高光环境下大量丢失,2x2的binning模式,分辨率会远低于感光面积的1/4。

chongyun_的专栏 1829

python k线顶分型_【缠论】分型、笔的定义及其程序化

K线包含关系处理和分型的定义如果一个K线的高低点全在另一K线的范围里,称之为包含关系。针对这种K线,需要进行一些处理,去除包含关系,处理方法:向上时,把两K线的高点当高点,而两K线低点中的较高者当成低点;反之,当向下时,把两K线的低点当低点,而两K线高点中的较低者当成高点,这样就把两K线合并成一新的K线。经过这样的处理,所有K线图都可以处理成没有包含关系的图形。两K线的包含关系,可以分成四种:1)...

weixin_39717152的博客 2826

关于maven Module[更新中]

使用mavenmodule建立一个springboot项目,项目启动之后,在module里面得bean找不到。 原因是要在启动的module当中,将别的module作为dependency引入,例如,启动module为A,另外三个module为B,C,D,则在A的pom当中,需要下面这样的dependency. <dependencies> <depe...

topdeveloperr的博客 564

Abaqus复合材料层合板仿真

由于复合材料的损伤失效问题过于复杂,解析方法受到数学工具的限制难以实现,而实验也需要高昂的费用和时间成本难以广泛应用,Abaqus针对复合材料提供了专业的建模工具和损伤分析理论来模拟复合材料层合板在各种工况下的失效行为。

JXHXHL的博客 2542

Android使用Maven管理Module

Android使用Maven管理Module注:本篇是基于mac10.2,jdk1.8的环境搭建1,下载Maven,下载地址:https://www.sonatype.com/download-oss-sonatype下载后解压文件夹nexus-3.3.1-01-mac。将文件移动至自己想放的路径下/androidstudio/nexus-3.3.1-01-mac2,配置nexus,使用文本编辑器编

qizufeng的专栏 813

用OpenNI2获取奥比中光Astra Pro及 Astra Pro SM输出的深度图(win,linux arm64 x64平台)

搞了一个奥比中光Astra Pro,想在windows平台,和linux rk3588 上获取深度信息,之前的驱动下载已经不好用了。

babytiger的专栏 1308

如何设计一个处理物联网设备数据流的后端系统。

设计一个处理物联网设备数据流的后端系统,需要综合考虑设备数据采集、传输、处理、存储等多个方面,保证系统能够处理海量数据,具备高可用性、扩展性和安全性。合理选择适当的技术架构和工具(如MQTT、Kafka、InfluxDB等),并确保系统能够灵活应对不断变化的业务需求和设备接入。

weixin_53227829的博客 841

Maven 的 module 管理

Maven 的模块化管理极大提升了项目的组织性、可维护性和扩展性。通过合理划分模块、统一依赖和插件管理、规范构建流程,可以让大型项目开发变得高效且可控。掌握多模块项目的管理,是企业级 Java 项目开发的基础能力之一。如需具体示例或某一部分更详细的说明,欢迎继续提问!

liu_rockefeller的博客 1199

STM32与AD7606的SPI通信优化:提升高精度数据采集效率

本文深入探讨了STM32与AD7606的SPI通信优化策略,旨在提升高精度数据采集系统的效率与稳定性。文章从硬件连接、电源去耦、PCB布局等基础环节入手,详细解析了软件驱动中SPI模式配置、DMA应用及精准时序控制等关键优化技术,并提出了系统级的性能提升方案,帮助开发者解决高速采样下的数据跳动、效率瓶颈等实际问题。

weixin_29192211的博客 393

spring新建maven的module

spring新建maven的module

m0_48333563的博客 326

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

idea 导入 maven 的module

1. 打开 Project Structure 2. 选择 + import Module 3.选择 maven module 3.选择 Maven 然后选择 next 4.添加成功

oDianZi1234567的博客 1010

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

关于maven多module的依赖问题

之前的项目因为历史的原因,都是一个project里只包含了一个module,今年进入了新的项目组,出现了多个module,最近刚好也是在学《maven实战》因此想要将这个东西记录下来 工程情况如下图 示例的工程名为inaction 其中位于根目录的pom.xml内的代码如下 1 <?xml version="1.0" encoding="UTF-8"?> 2...

weixin_34266504的博客 1628

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Maven deploy跳过某个module解决办法

当我们在模块化搭建工程的时候,某些module并不想deploy到maven仓库,我们需要deploy的只是其他会作为maven的jar依赖的module,具体参考下面来跳过发布到maven仓库: <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-deploy-plugin</artifactId> <version>2.7&lt

weixin_42290901的博客 2441

关于Maven创建module出现Ignored pom.xml文件如何解决

问题描述: 在Maven创建module时,没有正确建好module所以把它删掉了!又创建了一个之前删除了的同名的module名称。但是,新创建的module中的pom.xml文件出现Ignored pom.xml的问题,如图: 问题分析: 由于相同名称的module在之前被创建过,因此在IDEA中留有痕迹。重新创建一个新的同名module会让IDEA误以为是之前被删除掉的module,所以才自动将这个pom.xml文件忽略了呢。 解决方案: 1. 点击file > Setting进入设置 &nbs

TanaStudy的博客 2万+

IntelliJ IDEA 项目及Module的创建及使用maven插件进行jar打包

一、IDEA项目及Module创建 1. 创建项目 Create New Project:创建一个新的工程 Import Project:导入一个现有的工程 Open:打开一个已有工程。比如:可以打开 Eclipse 项目 Check out from Version Control:可以通过服务器上的项目地址 check out Github 上面项目或其他 Git 托管服...

程序猿丶HLK 2101

idea下Maven项目module不加粗显示,maven project中不显示module

记录一下idea下Maven项目module不加粗显示,maven project中不显示module,启动项目无法编译的问题 最近记性不好,来记录一下,每次搜百度都要好久。。。。 两种情况: 1. module处于remove状态,还没有delete,这时候需要Ctrl+Alt+Shift+S打开Project Structure,选择Module,点击最上面+号,选择import module...

danthk的博客 6861

关于Maven创建module弹出被忽略(Ignored)的Ignored pom.xml文件如何解决

Maven创建module弹出被忽略(Ignored)的Ignored pom.xml文件如何解决:新建了一个之前删除的同名module,pom.xml文件就变成灰色划掉了!解决方案:1.点击file > Setting进入设置......

你的瑶瑶吖~的博客 1万+
上一篇: HTML中的转义符
下一篇: maven 依赖管理/插件管理
一直到老到直一
博客等级 码龄10年 386粉丝 119原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值