当前位置: 首页 > news >正文

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 命令会执行项目的完整构建流程,包括以下步骤:

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

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

步骤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 账号。
  • 点击右上角头像,选择“设置”。
  • 在左侧菜单中,选择“安全设置”。
  • 找到“私人令牌”部分,点击“生成新令牌”。
  • 为令牌命名,选择所需的权限(如 repouser 等),然后点击“生成”。
  • 注意:生成的令牌只会显示一次,请妥善保存。

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

http://www.mrgr.cn/news/74879.html

相关文章:

  • Linux 查看端口和进程的常用命令(下)
  • 何以解忧-解决python问题的辛酸泪
  • PostgreSQL常用时间函数与时间计算提取示例说明
  • .NET高效下载word文件
  • 使用Axios函数库进行网络请求的使用指南
  • 1、使用vscode+eide+stm32cubeMx开发stm32
  • 【2025国考|考公资料】轻松备考:你的公职考试全攻略,快速提升通过率!
  • 【实战场景】企业敏感词拦截如何实现?怎么避免员工发送违规词?这个方法大可一试!
  • 原型设计救星降临:深度解析5款超燃原型工具
  • 高端定制网站是什么样的?推荐几家优质网站建设公司!
  • [【comfyui教程】ComfyUI]Flux:非常好用的自定义多区域提示插件,精确绘图,多风格融合出图!
  • qt QCamera详解
  • Kafka节点服役和退役
  • 算法——移除链表元素(leetcode203)
  • 单片机设计电流与温度监控python上位机监控平台设计
  • 三维点云 和模型转换的问题
  • 【Linux】多线程(中)
  • maven 中存在jar包,但是pom无法依赖
  • ssm114基于SSM框架的网上拍卖系统的设计与实现+vue(论文+源码)_kaic
  • ABAP开发学习——权限控制
  • 重磅!EN 1888-3欧盟婴儿手推车标准更新
  • 从H264视频中获取宽、高、帧率、比特率等属性信息
  • 【轻松解决】Defender SmartScreen 风险提示
  • 意式轻奢风!
  • shell批量重命名
  • 【SQL】一文速通SQL