Maven(10)如何使用Maven进行多模块项目管理?

embedded/2024/10/15 16:00:30/

使用Maven进行多模块项目管理是一种常见的做法,它可以帮助你组织大型项目,使其结构更加清晰,便于维护和构建。以下是使用Maven创建和管理多模块项目的详细步骤:

步骤1:创建父项目

首先,创建一个空的Maven项目作为父项目,它将管理所有子模块的依赖和插件。

  1. 使用Maven原型创建一个新项目:

    mvn archetype:generate -DgroupId=com.example -DartifactId=parent-module -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
    
  2. 进入项目目录并编辑pom.xml

  3. 在父项目的pom.xml中,设置<packaging>pom,并定义<modules>元素,列出所有子模块。

    <project><modelVersion>4.0.0</modelVersion><groupId>com.example</groupId><artifactId>parent-module</artifactId><version>1.0.0-SNAPSHOT</version><packaging>pom</packaging><modules><module>module-a</module><module>module-b</module><!-- 其他子模块 --></modules><!-- 依赖管理 --><dependencyManagement><dependencies><!-- 定义所有子模块共享的依赖 --></dependencies></dependencyManagement>
    </project>
    

步骤2:创建子模块

在父项目目录下创建子模块。

  1. 使用命令行创建子模块:

    mkdir module-a
    cd module-a
    mvn archetype:generate -DgroupId=com.example -DartifactId=module-a -DarchetypeArtifactId=maven-archetype-quickstart -Dversion=1.0.0-SNAPSHOT -DinteractiveMode=false
    
  2. 重复上述步骤创建其他子模块。

步骤3:配置子模块的pom.xml

在每个子模块的pom.xml中,确保<parent>元素指向父项目的<groupId><artifactId><version>

<project><parent><groupId>com.example</groupId><artifactId>parent-module</artifactId><version>1.0.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>module-a</artifactId><!-- 子模块的依赖 --><dependencies><!-- 子模块特定的依赖 --></dependencies>
</project>

步骤4:构建多模块项目

在父项目目录下运行Maven命令来构建整个项目。

mvn clean install

这将依次构建每个子模块,并确保它们都正确地继承了父项目的配置。

步骤5:管理依赖

在父项目的pom.xml中使用<dependencyManagement>来管理所有子模块共享的依赖版本。子模块只需声明依赖的<groupId><artifactId>,而不需要指定版本。

<dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>2.5.4</version></dependency><!-- 其他共享依赖 --></dependencies>
</dependencyManagement>

示例代码

以下是一个简化的父项目pom.xml示例:

<project><modelVersion>4.0.0</modelVersion><groupId>com.example</groupId><artifactId>parent-module</artifactId><version>1.0.0-SNAPSHOT</version><packaging>pom</packaging><modules><module>module-a</module><module>module-b</module></modules><dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>2.5.4</version></dependency></dependencies></dependencyManagement>
</project>

每个子模块的pom.xml可能如下所示:

<project><parent><groupId>com.example</groupId><artifactId>parent-module</artifactId><version>1.0.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>module-a</artifactId><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies>
</project>

通过这种方式,你可以有效地管理多模块Maven项目,确保依赖和构建配置的一致性。


http://www.ppmy.cn/embedded/127943.html

相关文章

实验kubernetes的CPU绑定策略

CPU 管理配置 CPU 管理策略通过 kubelet 参数 --cpu-manager-policy 或 KubeletConfiguration 中的 cpuManagerPolicy 字段来指定。 支持两种策略&#xff1a; none&#xff1a;默认策略。static&#xff1a;允许为节点上具有某些资源特征的 Pod 赋予增强的 CPU 亲和性和独占…

如何有效进行主机加固?深信达MCK提供答案

在数字化时代&#xff0c;企业面临的网络安全威胁日益严峻&#xff0c;尤其是勒索病毒等恶意软件的攻击&#xff0c;给企业带来了巨大的挑战。为了有效应对这些威胁&#xff0c;企业需要采取全面的网络安全防护措施&#xff0c;其中主机加固成为了关键的一环。深信达的MCK主机加…

排队模型和贪心算法,贪心算法在算力共享排队系统中的应用

目录 排队模型和贪心算法 一、排队模型概述 二、贪心算法简介 三、排队模型与贪心算法的关系 四、实例说明 贪心算法在算力共享排队系统中的应用 贪心算法的局限性 排队模型和贪心算法 之间存在密切的关系,主要体现在排队问题的求解过程中。 一、排队模型概述 排队模…

How to list the environment variables in MySQL based on podman

有时候&#xff0c;我们期望系统的、完整的输出mysql中的环境变量&#xff0c;但是只是想看看&#xff0c;不想安装mysql&#xff0c;有没有什么好的办法呢&#xff1f; 其实&#xff0c;答案是有的。我们可以基于docker/podman来完成&#xff0c;这里推荐podman&#xff0c;示…

vue中关于router.beforeEach()的用法

router.beforeEach()是Vue.js中的路由守卫&#xff0c;用于在路由跳转前进行校验、取消、重定向等操作。 基本使用&#xff1a; const router new VueRouter({ ... })router.beforeEach((to, from, next) > {// ... }) to: 即将要进入的目标路由对象 from: 当前导航正要…

如何捕捉行情爆发的前兆

在金融市场的激烈角逐中&#xff0c;每一次行情的爆发都是投资者获取丰厚回报的关键时刻。然而&#xff0c;如何识别并把握这些时刻&#xff0c;却是一门需要深厚金融专业知识和敏锐洞察力的艺术。今天&#xff0c;我们就来深入探讨行情爆发的初期信号&#xff0c;揭示那些能够…

常用的设计模式,以及c++代码简答示例

常用的设计模式及其 C 简短示例&#xff1a; 1. 单例模式&#xff08;Singleton Pattern&#xff09; 作用&#xff1a;确保一个类只有一个实例&#xff0c;并提供全局访问点。 示例代码&#xff1a; class Singleton { private:static Singleton* instance;Singleton() {} …

MFC的.rc 和.rc2文件【常见问题】

目录 一、介绍 .rc 文件 .rc2 文件 使用上的建议 二、实例 工程截图 rc文件 rc2文件 注意&#xff1a; 三、使用 能否删除&#xff1f; 一、介绍 在MFC项目中&#xff0c;.rc和.rc2文件都是资源脚本文件&#xff0c;但它们有不同的用途和管理方式。它们两指向的是同…