IDEA中创建多模块项目步骤

步骤 1:使用 Spring Initializr 创建父项目

  1. 打开IntelliJ IDEA,选择 File > New > Project
  2. 选择 Spring Initializr 并配置项目信息:
    • Group ID:例如 com.aqian,用于项目的组织标识。
    • Artifact ID:例如 cangqiong(即父项目名称),用于项目的唯一标识。
    • Packaging:选择 pom,确保父项目仅作为架构项目,无需生成 src 文件夹。
    • Java version:选择您项目所需的 Java 版本。
  3. 选择项目依赖:勾选所有子模块需要的公共依赖(例如 Spring Boot Web、Spring Data JPA、Spring Boot DevTools 等)。这样公共依赖会添加到父项目的 pom.xml 中,所有子模块均能继承。
  4. 点击 Finish,完成父项目的创建。

步骤 2:删除父项目中不需要的文件夹

  1. 删除自动生成的 src 文件夹,因为父项目不包含业务代码,仅用作管理。

  2. 保留以下文件和文件夹

    • pom.xml:父项目的核心配置文件,管理依赖和插件。
    • .gitignore:指定需要忽略的文件(如 target 文件夹)。
    • .idea:IntelliJ IDEA 项目配置文件夹。
  3. 配置父项目 pom.xml 文件:确保 packaging 设置为 pom,并在 <dependencyManagement> 中添加通用依赖。

    <packaging>pom</packaging><dependencyManagement><dependencies><!-- 父项目定义的公共依赖,子模块会自动继承 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><!-- 可以添加其他所有子模块需要的依赖 --></dependencies>
    </dependencyManagement><build><plugins><!-- Spring Boot 插件,用于运行和打包 Spring Boot 应用 --><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins>
    </build>
    

步骤 3:为父项目添加子模块

  1. 右键父项目,选择 New > Module
  2. 选择 Spring Initializr 作为模块类型,然后配置子模块信息:
    • Group ID:与父项目相同,例如 com.aqian
    • Artifact ID:例如 module1(子模块名称)。
    • 不勾选公共依赖(如 Spring Boot Web、Data JPA 等),因为这些依赖已经在父项目中配置。
  3. 完成创建后,IDEA会生成一个包含 src 文件夹和 pom.xml 的子模块。

步骤 4:清理子模块不必要的文件

  1. 只保留 src 文件夹和 pom.xml 文件

  2. 配置子模块的 pom.xml

    • <parent> 中设置子模块继承父项目配置,并删除 <relativePath/> 标签,避免路径配置错误。
    • 删除 <build> 配置,使子模块直接使用父项目的构建配置,避免冗余。

    示例子模块的 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.aqian</groupId><artifactId>cangqiong</artifactId><version>0.0.1-SNAPSHOT</version></parent><groupId>com.aqian</groupId><artifactId>module1</artifactId><version>0.0.1-SNAPSHOT</version><dependencies><!-- 子模块特定的依赖(如果有)可以在这里添加 --></dependencies>
    </project>
    
  3. 重复以上步骤,为其他模块创建并配置 pom.xml,确保所有子模块继承父项目。

步骤 5:在父项目 pom.xml 中添加 <modules>

  1. 打开父项目的 pom.xml 文件,确保每个子模块都在 <modules> 标签中。如果没有自动添加,可以手动配置,如下所示:

    <modules><module>module1</module><module>module2</module><!-- 其他子模块名称 -->
    </modules>
    

步骤 6:构建和测试项目

  1. 在Maven工具窗口(通常位于右侧)点击 Reload All Maven Projects,确保所有子模块和依赖加载到位。

  2. 使用 mvn install 命令:在父项目的根目录下运行 mvn install 命令,这会构建父项目及其所有子模块,并将生成的构建工件(如 .jar 文件)安装到本地Maven仓库。

    mvn install 作用
    mvn install 命令会执行项目的完整构建流程,包括以下步骤:

    • 编译:将 Java 源代码编译成字节码(.class 文件)。
    • 测试:执行单元测试并生成测试报告。
    • 打包:将编译和测试后的代码打包成 .jar 文件(或其他格式,取决于 pom.xml 中的配置)。
    • 安装:将打包生成的 .jar 文件安装到本地Maven仓库(默认路径为 ~/.m2/repository),以便其他项目或模块可以引用这些构建工件。

    通过 mvn install,所有模块的 .jar 文件将会保存在本地仓库,便于子模块间的相互依赖和项目集成。

最终项目结构

构建完成后,项目结构如下,每个子模块下都会有一个 target 文件夹,用于存放构建结果:

cangqiong/
├── pom.xml                  # 父项目 POM 文件,包含依赖管理和模块配置
├── .gitignore               # Git 忽略文件
├── .idea/                   # IDEA 项目配置
├── module1/
│   ├── src/                 # 子模块的源代码目录
│   ├── target/              # 子模块的构建结果目录(由mvn install生成)
│   └── pom.xml              # 子模块的 POM 文件,继承父项目
└── module2/├── src/├── target/└── pom.xml

注意

  • 每个子模块的 target 文件夹在运行 mvn install 或其他构建命令时自动生成,包含 .class 文件、测试报告、打包的 .jar 文件等。建议在 .gitignore 中忽略 target 文件夹,避免提交到版本控制系统中。

完整的.gitignore 文件配置如下,其中规定了哪些文件不提交到git仓库。 

# IntelliJ IDEA 配置
.idea/
*.iml# Maven 编译输出目录
**/target/# 忽略操作系统生成的临时文件
.DS_Store
Thumbs.db

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/14266.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

sol机器人pump机器人如何实现盈利的?什么是Pump 扫链机器人?

什么是Pump 扫链机器人&#xff0c;它的盈利逻辑优化策略是什么&#xff1f; Pump 扫链机器人&#xff0c;通过智能化、自动化的买卖操作帮助投资者实现快速盈利。在此基础上&#xff0c;我们对该机器人的盈利逻辑进行了深度优化&#xff0c;涵盖了买入策略和止盈策略的各个方面…

【vue2】13.自定义指令

目录 自定义指令 自定义指令的作用? 自定义指令的使用步骤? 1. 注册 (全局注册 或 局部注册) 2. 标签上 v-指令名 使用 自定义指令 - 指令的值 1. 通过指令的值相关语法&#xff0c;可以应对更复杂指令封装场景 2. 指令值的语法&#xff1a; 自定义指令 - v-loading…

【LLM】Agent的相关Benchmark

note 文章目录 note一、SuperCLUE-Agent二、AgentBench三、跨系统benchmark&#xff1a;CRAB四、SWE-bench 一、SuperCLUE-Agent SuperCLUE-Agent是一个 Agent智能体中文原生任务能力测评基准&#xff0c;评估方面包括&#xff1a; 工具使用能力&#xff08;调用API、检索API、…

MATLAB用CNN-LSTM神经网络的语音情感分类深度学习研究

全文链接&#xff1a;https://tecdat.cn/?p38258 原文出处&#xff1a;拓端数据部落公众号 在语音处理领域&#xff0c;对语音情感的分类是一个重要的研究方向。本文将介绍如何通过结合二维卷积神经网络&#xff08;2 - D CNN&#xff09;和长短期记忆网络&#xff08;LSTM&…

机器学习基础03

目录 1.KNN算法-分类 1.1样本距离判断 1.1.1欧式距离 1.1.2曼哈顿距离 1.2KNN 算法原理 1.3KNN缺点 1.4API 2.模型选择与调优 2.1保留交叉验证 2.2K-折交叉验证 2.3分层k-折交叉验证Stratified k-fold 2.4其它验证 2.5API 3.模型保存与加载 3.1保存模型 3.2加…

【go从零单排】go语言中testing的几种类型

&#x1f308;Don’t worry , just coding! 内耗与overthinking只会削弱你的精力&#xff0c;虚度你的光阴&#xff0c;每天迈出一小步&#xff0c;回头时发现已经走了很远。 &#x1f4d7;概念 Go 语言中的 testing 包是用于编写和运行测试的标准库。它提供了丰富的功能&…

[笔记]自动化中破解验证码

01需求分析 1.打开一个chrome浏览器 2.输入论坛的网址: http://114.116.2.138:8090/forum.php 3.输入用户名admin 4.输入密码123456 5.点击登录 6.输入验证码 7.再点击登录 02准备工作 selenium环境搭建 参考地址: https://blog.csdn.net/python_jeff/article/details…

2024下半年软考系统架构设计师案例分析题试题与答案

解析中包含所有真题图片 解析中包含所有真题图片 解析中包含所有真题图片 解析中包含所有真题图片 第一题 解析见&#xff08;点我&#xff09;&#xff1a;https://blog.csdn.net/u014624241/article/details/143701384 第二题 解析见&#xff08;点我&#xff09;&#…

使用 Python 和 Selenium 解决 hCaptcha:完整指南

如果你跟我一样&#xff0c;你可能也曾遇到过在抓取数据或自动化任务时试图绕过 hCaptcha 的挫折感。你懂的&#xff0c;hCaptcha 弹出来&#xff0c;你的脚本就戛然而止。但别担心&#xff01;我们都经历过。好消息是&#xff0c;用 Python 和 Selenium 解决 hCaptcha 挑战并不…

[HAOI2015] 树上染色(树形 DP)

题目传送门https://www.luogu.com.cn/problem/P3177 解题思路 设 表示以 为根的子树染 个黑点的最大收益值。 设一共有 个节点&#xff0c;要染 个点。 完成 DP 状态的设计后&#xff0c;开始推导转移方程…… 对于一个点 &#xff0c;它下面有一条通向 &#xff0c;权…

Python学习从0到1 day28 Python 高阶技巧 ⑧ 递归

那就祝我们爬不同的山&#xff0c;还能回到同一条路上&#xff0c;不是时时见面&#xff0c;但是时时惦记之人 —— 24.11.13 递归 1.什么是递归 递归在编程中是一种非常重要的算法 递归&#xff1a;即方法(函数)自己调用自己的一种特殊编程写法 函数调用自己&#xff0c;即…

代码随想录算法训练营第二十二天|491.递增子序列、46.全排列、47.全排列 II

491.递增子序列 题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 文章讲解&#xff1a;代码随想录 视频讲解&#xff1a;回溯算法精讲&#xff0c;树层去重与树枝去重 | LeetCode&#xff1a;491.递增子序列_哔哩哔哩_bilibili《代码随想录》算法公开课开讲啦…

二叉树的最大深度

给定一个二叉树 root &#xff0c;返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;3示例 2&#xff1a; 输入&#xff1a;root [1,null,2] 输出…

要读文献 | Acta Pharmacol Sin | 上海药物所徐华强团队发表综述:基于生成扩散模型的 AI 驱动抗体设计

近日&#xff0c;来自中国科学院上海药物研究所的徐华强团队在 Acta Pharmacologica Sinica 发表综述文章“AI-driven antibody design with generative diffusion models: current insights and future directions”。文章主要讨论了基于生成扩散模型的抗体设计的最新进展&…

Collections 工具类

在 Java 编程中&#xff0c;集合&#xff08;Collections&#xff09;是处理数据的核心工具之一。为了简化集合操作并提高代码的可读性和可维护性&#xff0c;JDK 提供了一个强大的工具类&#xff1a;java.util.Collections。这个类包含了一系列静态方法&#xff0c;用于对集合…

机器学习引领流体动力学新纪元:CFD、Fluent与OpenFOAM的深度融合

在科技日新月异的今天&#xff0c;机器学习正以前所未有的力量重塑着众多学科领域&#xff0c;其中&#xff0c;流体动力学便是受益匪浅的典范。作为计算流体力学&#xff08;CFD&#xff09;领域的两大巨头&#xff0c;Fluent与OpenFOAM正携手机器学习技术&#xff0c;共同开启…

django入门【05】模型介绍(二)——字段选项

文章目录 1、null 和 blank示例说明⭐ null 和 blank 结合使用的几种情况总结&#xff1a; 2、choices**choices 在 Django 中有以下几种形式&#xff1a;**&#xff08;1&#xff09; **简单的列表或元组形式**&#xff08;2&#xff09; **字典映射形式**&#xff08;3&#…

PL/SQL执行.sql文件

1.编写.sql文件&#xff0c;创建update.sql文件&#xff0c;文件如下&#xff1a; set feedback offset define off--更新表中所有人的年龄update a set age18;prompt Done. 2.打开plsql选择命令窗口&#xff0c;即选择File->New->Command Window&#xff1b; 打开后的…

论文5—《基于改进YOLOv5s的轻量化金银花识别方法》文献阅读分析报告

论文报告&#xff1a;基于改进YOLOv5s的轻量化金银花识别方法 论文报告文档 基于改进YOLOv5s的轻量化金银花识别方法 论文报告文档摘要国内外研究现状国内研究现状国外研究现状 研究目的研究问题使用的研究方法试验研究结果文献结论创新点和对现有研究的贡献1. 目标检测技术2. …

【数据结构】ArrayList与LinkedList详解!!!——Java

目录 一&#x1f31e;、List 1&#x1f345;.什么是List&#xff1f; 2&#x1f345;.List中的常用方法 二&#x1f31e;、ArrayList 1&#x1f34d;.什么是ArrayList? 2&#x1f34d;.ArrayList的实例化 3&#x1f34d;.ArrayList的使用 4&#x1f34d;.ArrayList的遍…