IDEA中创建多模块项目步骤
步骤 1:使用 Spring Initializr 创建父项目
- 打开IntelliJ IDEA,选择 File > New > Project。
- 选择 Spring Initializr 并配置项目信息:
- Group ID:例如
com.aqian,用于项目的组织标识。 - Artifact ID:例如
cangqiong(即父项目名称),用于项目的唯一标识。 - Packaging:选择
pom,确保父项目仅作为架构项目,无需生成src文件夹。 - Java version:选择您项目所需的 Java 版本。
- Group ID:例如
- 选择项目依赖:勾选所有子模块需要的公共依赖(例如 Spring Boot Web、Spring Data JPA、Spring Boot DevTools 等)。这样公共依赖会添加到父项目的
pom.xml中,所有子模块均能继承。 - 点击 Finish,完成父项目的创建。
步骤 2:删除父项目中不需要的文件夹
-
删除自动生成的
src文件夹,因为父项目不包含业务代码,仅用作管理。 -
保留以下文件和文件夹:
pom.xml:父项目的核心配置文件,管理依赖和插件。.gitignore:指定需要忽略的文件(如target文件夹)。.idea:IntelliJ IDEA 项目配置文件夹。
-
配置父项目
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:为父项目添加子模块
- 右键父项目,选择 New > Module。
- 选择 Spring Initializr 作为模块类型,然后配置子模块信息:
- Group ID:与父项目相同,例如
com.aqian。 - Artifact ID:例如
module1(子模块名称)。 - 不勾选公共依赖(如 Spring Boot Web、Data JPA 等),因为这些依赖已经在父项目中配置。
- Group ID:与父项目相同,例如
- 完成创建后,IDEA会生成一个包含
src文件夹和pom.xml的子模块。
步骤 4:清理子模块不必要的文件
-
只保留
src文件夹和pom.xml文件。 -
配置子模块的
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> - 在
-
重复以上步骤,为其他模块创建并配置
pom.xml,确保所有子模块继承父项目。
步骤 5:在父项目 pom.xml 中添加 <modules>
-
打开父项目的
pom.xml文件,确保每个子模块都在<modules>标签中。如果没有自动添加,可以手动配置,如下所示:<modules><module>module1</module><module>module2</module><!-- 其他子模块名称 --> </modules>
步骤 6:构建和测试项目
-
在Maven工具窗口(通常位于右侧)点击 Reload All Maven Projects,确保所有子模块和依赖加载到位。
-
使用
mvn install命令:在父项目的根目录下运行mvn install命令,这会构建父项目及其所有子模块,并将生成的构建工件(如.jar文件)安装到本地Maven仓库。mvn install作用:mvn install命令会执行项目的完整构建流程,包括以下步骤:通过
mvn install,所有模块的.jar文件将会保存在本地仓库,便于子模块间的相互依赖和项目集成。- 编译:将 Java 源代码编译成字节码(
.class文件)。 - 测试:执行单元测试并生成测试报告。
- 打包:将编译和测试后的代码打包成
.jar文件(或其他格式,取决于pom.xml中的配置)。 - 安装:将打包生成的
.jar文件安装到本地Maven仓库(默认路径为~/.m2/repository),以便其他项目或模块可以引用这些构建工件。
- 编译:将 Java 源代码编译成字节码(
步骤7:配置.gitignore文件
.gitignore文件内部用来规定哪些文件不会被提交到git仓库。
.gitignore 文件用于指定应被 Git 忽略的文件或目录,其语法规则如下:
1.空行:被忽略,可用于分隔不同的规则块。
2.注释:以 # 开头的行被视为注释。
# 这是一个注释
3.通配符:
*(星号):匹配零个或多个任意字符,但不匹配路径分隔符 /。
*.log # 匹配所有以 .log 结尾的文件
?(问号):匹配任意单个字符。
config?.yml # 匹配 config1.yml、configA.yml 等
[](方括号):匹配方括号内的任意一个字符。
test[12].txt # 匹配 test1.txt 和 test2.txt
**(双星号):匹配任意层级的目录。
**/logs # 匹配任意位置的 logs 目录
4.目录匹配:
-
以
/结尾:表示匹配目录。temp/ # 匹配 temp 目录 -
以
/开头:表示从仓库根目录开始匹配。/build # 仅匹配仓库根目录下的 build 文件或目录
5.取反匹配:以 ! 开头的模式表示例外,即不忽略匹配该模式的文件或目录。
*.log
!important.log # 忽略所有 .log 文件,但不忽略 important.log
注意:如果父目录已被忽略,则子文件或目录即使使用取反模式也无法被包含。
6.转义字符:如果文件名中包含特殊字符(如 #、! 等),可使用反斜杠 \ 进行转义。
\#important.log # 匹配文件名为 #important.log 的文件
步骤8:为子模块配置SDK
多模块项目的配置缺失:多模块项目中,子模块的语言级别和 SDK 设置可能不会自动继承父项目配置,因此需要手动确认。
Project SDK:指定了项目使用的 JDK 版本,它提供了 Java 编译器、运行时以及核心库(如 java.lang.String 等基础类)。如果没有指定正确的 SDK,IDE 就无法找到这些核心库,从而导致无法解析符号的错误。
如何在 IntelliJ IDEA 中设置
具体操作如下:
1.配置项目级别的 SDK 和语言级别
- 打开
File > Project Structure > Project。 - 在
Project SDK下拉菜单中,选择适合的 JDK 版本。如果列表中没有目标 JDK,可以通过New按钮添加。 - 在
Project language level下拉菜单中,选择匹配的 Java 语言级别。
2.配置模块级别的 SDK 和语言级别
- 进入
File > Project Structure > Modules。 - 选择子模块,在右侧设置
SDK为项目 SDK。 - 在
Language Level下拉菜单中,确保选择了与项目兼容的语言级别。
步骤9:提交到Gitee远程仓库
- 本地分支:在你的本地 Git 仓库中创建和管理的分支。每个本地分支有独立的开发历史和变更记录。
- 远程分支:指的是在远程仓库(如 GitHub、Gitee 等)中的分支。远程分支通常与团队其他成员共享,用于协作开发。
- 推送(Push):将本地分支的更新推送到远程分支,使团队成员看到你的改动。
- 拉取(Pull):将远程分支的更改拉到本地分支,确保自己的代码与团队同步。
在 IntelliJ IDEA 中提交到 Gitee 仓库时,不建议直接使用 Gitee 账户的用户名和密码。Gitee 已弃用简单的账户密码方式,推荐使用 访问令牌(Access Token) 来替代密码进行身份验证。
使用 Gitee 的访问令牌(Access Token)
为什么使用访问令牌而非账户密码?
使用访问令牌比直接使用账户密码更安全,而且 Gitee 也不再允许简单密码的远程认证,因此 访问令牌 是推送和拉取代码的推荐方式。
1. 生成 Gitee 访问令牌
- 登录您的 Gitee 账号。
- 点击右上角头像,选择“设置”。
- 在左侧菜单中,选择“安全设置”。
- 找到“私人令牌”部分,点击“生成新令牌”。
- 为令牌命名,选择所需的权限(如
repo、user等),然后点击“生成”。 - 注意:生成的令牌只会显示一次,请妥善保存。
2. 在 IntelliJ IDEA 中配置 Gitee 账户
- 打开 IntelliJ IDEA,点击菜单栏的
File,选择Settings(或Preferences,视操作系统而定)。 - 在设置窗口中,导航到
Version Control>GitHub。 - 点击右侧的“+”按钮,选择“Gitee”。
- 在弹出的对话框中,选择“Log In with Token”。
- 将之前生成的访问令牌粘贴到相应的输入框中,点击“Add Account”。
3. 提交代码到 Gitee 仓库
- 在项目中,右键点击需要提交的文件或目录,选择
Git>Commit。 - 在提交窗口中,填写提交信息,点击“Commit”。
- 提交后,点击“Push”按钮,将代码推送到远程 Gitee 仓库。
最终项目结构
构建完成后,项目结构如下,每个子模块下都会有一个 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
相关文章:
IDEA中创建多模块项目步骤
步骤 1:使用 Spring Initializr 创建父项目 打开IntelliJ IDEA,选择 File > New > Project。选择 Spring Initializr 并配置项目信息: Group ID:例如 com.aqian,用于项目的组织标识。Artifact ID:例…...
深度学习笔记13-卷积神经网络1
1.卷积神经网络 卷积神经网络(CNN),它是由多个卷积层、池化层和全连接层构成的前馈神经网络。在卷积神经网络中,包含了可训练的卷积核,这使得卷积神经网络具有强大的表征学习能力。卷积神经网络通过卷积层和池化层进行…...
【新华妙笔-注册/登录安全分析报告-无验证方式导致安全隐患】
前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 1. 暴力破解密码,造成用户信息泄露 2. 短信盗刷的安全问题,影响业务及导致用户投诉 3. 带来经济损失,尤其是后付费客户,风险巨大,造…...
STM32电源管理—实现低功耗
注: 本文是学习野火的指南针开发板过程的学习笔记,可能有误,详细请看B站野火官方配套视频教程(这个教程真的讲的很详细,请给官方三连吧) 在响应绿色发展的同时,在很多应用场合中都对电子设备的功…...
【链路层】空口数据包详解(4):数据物理通道协议数据单元(PDU)
目录 一、概述 1.1. 头部(Header)结构 1.2. MIC字段的情况说明 1.3. 有效载荷(Payload)格式与LLID字段的关联 二、LL Data PDU 2.1. 定义与用途 2.2. 头部字段设置 2.3. 空PDU(Empty PDU ) 2.4. 数…...
数学分组求偶数和
问题描述 小M面对一组从 1 到 9 的数字,这些数字被分成多个小组,并从每个小组中选择一个数字组成一个新的数。目标是使得这个新数的各位数字之和为偶数。任务是计算出有多少种不同的分组和选择方法可以达到这一目标。 numbers: 一个由多个整数字符串组…...
机器学习基础02_特征工程
目录 一、概念 二、API 三、DictVectorize字典列表特征提取 四、CountVectorize文本特征提取 五、TF-IDF文本1特征词的重要程度特征提取 六、无量纲化预处理 1、MinMaxScaler 归一化 2、StandardScaler 标准化 七、特征降维 1、特征选择 VarianceThreshold 底方差…...
CSS Modules中的 :global
最近写需求遇到如下代码,我们来分析一番: .medicine-bot {:global(.cosd-site-vcard-card) {margin-top: -3px;}:global(.cosd-site-vcard-title-text) {font-size: var(--cos-text-headline-sm);}:global(.cosd-site-vcard-button) {background-color: …...
linux病毒编写+vim shell编程
学习视频来自B站UP主泷羽sec,如涉及侵权马上删除文章 感谢泷羽sec 团队的教学 请一定遵循《网络空间安全法》!!! Linux目录介绍 /bin 二进制可执行文件(kali里面是工具一些文件)/etc 系统的管理和配置文…...
WinDefender Weaker
PPL Windows Vista / Server 2008引入 了受保护进程的概念,其目的不是保护您的数据或凭据。其最初目标是保护媒体内容并符合DRM (数字版权管理)要求。Microsoft开发了此机制,以便您的媒体播放器可以读取例如蓝光,同时…...
智能工厂的设计软件 为了监管控一体化的全能Supervisor 的监督学习 之 序5 架构for认知系统 总述 (架构全图)
本文提要 本文讨论的“智能工厂的设计软件” for认知系统的架构全图 ,这有别于前面所说的“智能工厂的设计软件”的“全景图”。两者在内容和侧重点上有所不同,但它们共同构成了对智能工厂设计软件的全面描述。 全景图是对智能工厂设计软件的整体概览&…...
vmware集群 vSAN HCL 数据库
HCL数据库升级 https://partnerweb.vmware.com/service/vsan/all.json VSAN版本目录升级 https://vcsa.vmware.com/ph/api/v1/results?deploymentId2d02e861-7e93-4954-9a73-b08692a330d1&collectorIdVsanCloudHealth.6_5&objectId0c3e9009-ba5d-4e5f6-bae8-f25ec5…...
人工智能引发直播革命:AI 技术塑造无人直播全新体验
在数字化浪潮席卷全球的今天,人工智能(AI)技术以其无与伦比的速度和广度,正深刻地改变着各行各业的面貌。其中,直播行业作为新媒体时代的宠儿,也迎来了由AI技术引领的颠覆性变革。这场由人工智能引发的直播…...
数据研发基础 | 什么是流批一体
流批一体的概念是可能出现在大厂的面试题中的,虽然就算大厂实习也没机会实操这样的高级操作,学一点概念,面试多少是能说上一两句的。大致就是希望一套代码能同时在批处理和流处理中运行(同时做离线计算和实时计算)。下…...
《Python网络安全项目实战》项目6 编写密码工具程序
《Python网络安全项目实战》项目6 编写密码工具程序 项目6 编写密码工具程序任务6.1 猜数字游戏任务描述任务分析任务实施6.1.1 编写基本的猜数字程序6.1.3 测试并修改程序6.1.4 给程序增加注释 任务拓展任务实施6.2.1 生成随机密码6.2.4 菜单功能 相关知识1. 密码字典2. 密码字…...
现代C++HTTP框架cinatra
文章目录 cinatra简介主要特点 快速上手编译器版本要求使用指南快速示例 项目地址 cinatra简介 cinatra是一个基于C20协程的高性能HTTP框架,它的目标是提供一个快速开发的C HTTP框架解决方案 它不仅支持HTTP/1.1和1.0,还支持SSL和WebSocket,…...
【功耗现象】com.gorgeous.lite后台Camera 使用2小时平均电流200mA耗电量400mAh现象
现象 轻颜相机(com.gorgeous.lite)后台Camera 使用2小时平均电流200mA(BugReport提供的电流参考数据),耗电量400mAh 即耗电占比(200mA*2h)/(12.83h*52.68mA )400mAh/623mAh62% CameraOct 10 202321:03:08 - 23:03:372h16m15s859ms to 4h16m44s984msactive duration: 2h 0m 29…...
06.VSCODE:备战大项目,CMake专项配置
娇小灵活的简捷配置不过是年轻人谈情说爱的玩具,帝国大厦的构建,终归要交给CMake去母仪天下。一个没有使用 CMake 的 C 项目,就像未来世界里的一台相声表演,有了德纲却无谦,观众笑着遗憾。—— 语出《双城记》作者&…...
还是小时候味道的麻辣片
麻辣片的诞生,源于人们对辣味的热爱和对丰富口感的追求。它将辣椒的火辣、香料的浓郁和豆制品的醇厚完美结合在一起,创造出了一种令人回味无穷的美食体验。无论是在学校的小卖部、街头的小吃摊,还是超市的货架上,麻辣片都以其鲜艳…...
GaussDB部署架构
GaussDB部署架构 云数据库GaussDB管理平台(TPOPS)基于B/S架构开发,由Web、管控Service、管控Agent三部分组成,软件结构如图1所示。 图1 各节点部署架构 Web:作为用户接入子系统,用于将用户在Web下发的操作…...
(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)
题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...
华为云AI开发平台ModelArts
华为云ModelArts:重塑AI开发流程的“智能引擎”与“创新加速器”! 在人工智能浪潮席卷全球的2025年,企业拥抱AI的意愿空前高涨,但技术门槛高、流程复杂、资源投入巨大的现实,却让许多创新构想止步于实验室。数据科学家…...
深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...
java_网络服务相关_gateway_nacos_feign区别联系
1. spring-cloud-starter-gateway 作用:作为微服务架构的网关,统一入口,处理所有外部请求。 核心能力: 路由转发(基于路径、服务名等)过滤器(鉴权、限流、日志、Header 处理)支持负…...
椭圆曲线密码学(ECC)
一、ECC算法概述 椭圆曲线密码学(Elliptic Curve Cryptography)是基于椭圆曲线数学理论的公钥密码系统,由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA,ECC在相同安全强度下密钥更短(256位ECC ≈ 3072位RSA…...
Unity3D中Gfx.WaitForPresent优化方案
前言 在Unity中,Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染(即CPU被阻塞),这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案: 对惹,这里有一个游戏开发交流小组&…...
工业安全零事故的智能守护者:一体化AI智能安防平台
前言: 通过AI视觉技术,为船厂提供全面的安全监控解决方案,涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面,能够实现对应负责人反馈机制,并最终实现数据的统计报表。提升船厂…...
渲染学进阶内容——模型
最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...
MMaDA: Multimodal Large Diffusion Language Models
CODE : https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA,它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构…...
P3 QT项目----记事本(3.8)
3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...
