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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

WPF-控件的属性值的类型转化

控件的属性值需要转成int、double进行运算的&#xff0c;可以使用一下方法 页面代码 <StackPanel Margin"4,0,0,0" Style"{StaticResource Form-StackPanel}"> <Label Content"替换后材料增加金额&#xff…

【从零开始的LeetCode-算法】3270. 求出数字答案

给你三个 正 整数 num1 &#xff0c;num2 和 num3 。 数字 num1 &#xff0c;num2 和 num3 的数字答案 key 是一个四位数&#xff0c;定义如下&#xff1a; 一开始&#xff0c;如果有数字 少于 四位数&#xff0c;给它补 前导 0 。答案 key 的第 i 个数位&#xff08;1 < …

iMetaOmics | 刘永鑫/陈同-用于食物微生物组成和时间序列研究的微生物组数据库FoodMicroDB...

点击蓝字 关注我们 FoodMicroDB&#xff1a;用于食物微生物组成和时间序列研究的微生物组数据库 iMeta主页&#xff1a;http://www.imeta.science 研究论文 ● 原文链接DOI: https://doi.org/10.1002/imo2.40 ● 2024年11月1日&#xff0c;中国农业科学院深圳农业基因组研究所刘…

视觉slam十四讲 ch8 光流法和直接法

之前的都是单层光流 转载至Blibli 视觉SLAM十四讲_7视觉里程计1_计算相机运动_哔哩哔哩_bilibili

QSS 设置bug

问题描述&#xff1a; 在QWidget上add 一个QLabel&#xff0c;但是死活不生效 原因&#xff1a; c 主程序如下&#xff1a; QWidget* LOGO new QWidget(logo_wnd);LOGO->setFixedSize(logo_width, 41);LOGO->setObjectName("TittltLogo");QVBoxLayout* tit…

Linux运维篇-iscsi存储搭建

目录 概念实验介绍环境准备存储端软件安装使用targetcli来管理iSCSI共享存储 客户端软件安装连接存储 概念 iSCSI是一种在Internet协议上&#xff0c;特别是以太网上进行数据块传输的标准&#xff0c;它是一种基于IP Storage理论的存储技术&#xff0c;该技术是将存储行业广泛…

WSL--无需安装虚拟机和docker可以直接在Windows操作系统上使用Linux操作系统

安装WSL命令 管理员打开PowerShell或Windows命令提示符&#xff0c;输入wsl --install&#xff0c;然后回车 注意&#xff1a;此命令将启用运行 WSL 和安装 Linux 的 Ubuntu 发行版所需的功能。 注意&#xff1a;默认安装最新的Ubuntu发行版。 注意&#xff1a;默认安装路径是…

【学习心得】算力云平台上的大模型部署并实现远程调用

以AutoDL算力云平台为例&#xff0c;部署国产开源ChatGLM3b模型。 一、准备工作 &#xff08;1&#xff09;准备一台算力服务器 首先&#xff0c;进入AutoDL官网的算力时长选择算力服务器资源。 创建好后会自动跳转控制台的“容器实例”界面&#xff0c;稍等片刻后选择“快捷…

Vue 中的透传,插槽,依赖注入

1. 透传attributes 在组件上使用透传attribute&#xff1a; 当你在父组件中使用子组件时&#xff0c;你可以添加一些attribute到子组件上&#xff0c;即使这些attribute没有在子组件的props中声明。 父组件&#xff1a; <!-- 父组件&#xff0c;例如 ParentComponent.vue…

97.【C语言】数据结构之栈

目录 栈 1.基本概念 2.提炼要点 3.概念选择题 4.栈的实现 栈初始化函数 入栈函数 出栈函数和栈顶函数 栈顶函数 栈销毁函数 栈 基本概念参见王爽老师的《汇编语言 第四版》第56和57页 节选一部分 1.基本概念 注意:这里提到的数据结构中的栈有别于操作系统的栈,后者是…

Spring-boot 后端java配置接口返回jsp页面

Spring-boot 后端java配置接口返回jsp页面 spring boot 基于spring MVC的基础上进行了改进&#xff0c; 将Controller 与ResponseBody 进行了合并成一个新的注解 RestController。 当用户请求时&#xff0c;需要有视图渲染的&#xff0c;与请求数据的请求分别使用 1.在appli…

【操作系统实验课】Makefile与编译

1. 创建项目结构 my_project 使用mkdir命令在根目录下创建项目my_project sudo mkdir /my_project 进入my_project目录 cd my_project src 在my_project目录下创建src子目录 sudo mkdir src 进入src目录 cd src root(根用户) 切换用户身份为root(根用户) root用户…

冠层四流近似模型的发展历史

1. Kunbelka-Munk theory This is the earlist model using a two-stream approximation d I d z − ( k s ) I s J d J d z ( k s ) J − s I \begin{aligned} &\frac{dI}{dz} -(ks)IsJ\\ &\frac{dJ}{dz} (ks)J - sI \end{aligned} ​dzdI​−(ks)IsJdzdJ​(…

Linux从0——1之shell编程4

声明&#xff01; 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下&#xff0c;如涉及侵权马上删除文章&#xff0c;笔记只是方便各位师傅的学习和探讨&#xff0c;文章所提到的网站以及内容&#xff0c;只做学习交流&#xff0c;其他均与本人以及泷羽sec团队无关&a…

2024.5 AAAiGLaM:通过邻域分区和生成子图编码对领域知识图谱对齐的大型语言模型进行微调

GLaM: Fine-Tuning Large Language Models for Domain Knowledge Graph Alignment via Neighborhood Partitioning and Generative Subgraph Encoding 问题 如何将特定领域知识图谱直接整合进大语言模型&#xff08;LLM&#xff09;的表示中&#xff0c;以提高其在图数据上自…

【大语言模型】ACL2024论文-15 大型语言模型中的最佳解释推断

【大语言模型】ACL2024论文-15 大型语言模型中的最佳解释推断 目录 文章目录 【大语言模型】ACL2024论文-15 大型语言模型中的最佳解释推断目录摘要研究背景问题与挑战如何解决创新点算法模型实验效果推荐阅读指数&#xff1a;★★★★☆后记 大型语言模型中的最佳解释推断 摘…

【最新鸿蒙开发之性能优化——动态加载和延迟加载】

大家好&#xff0c;我是学徒小z&#xff0c;在经历了一段时间项目开发中&#xff0c;我也渐渐意识到了性能的重要性&#xff0c;今天就分享一篇优化应用运行性能的文章&#xff0c;话不多说&#xff0c;开干&#xff01; 引言 延时触发操作与延迟加载的简介 动态加载&#x…

云计算研究实训室建设方案

一、引言 随着云计算技术的迅速发展和广泛应用&#xff0c;职业院校面临着培养云计算领域专业人才的迫切需求。本方案旨在构建一个先进的云计算研究实训室&#xff0c;为学生提供一个集理论学习、实践操作、技术研发与创新于一体的综合性学习平台&#xff0c;以促进云计算技术…

信号保存和信号处理

目录 信号保存中重要的概念 内核中信号的保存 对sigset_t操作的函数 对block&#xff0c;pendding&#xff0c;handler三张表的操作 sigpromask ​编辑 sigpending 是否有sighandler函数呢&#xff1f; 案例 信号处理 操作系统是如何运行的&#xff1f; 硬件中断 …

用vscode编写verilog时,如何有信号定义提示、信号定义跳转(go to definition)、模块跳转(跨文件跳转)这些功能

&#xff08;一&#xff09;方法一&#xff1a;安装插件SystemVerilog - Language Support 安装一个vscode插件即可&#xff0c;插件叫SystemVerilog - Language Support。虽然说另一个插件“Verilog-HDL/SystemVerilog/Bluespec SystemVerilog”也有信号提示及定义跳转功能&am…