一文搞懂idea中的根目录和路径(以Mybatis为例)

在 IntelliJ IDEA 中,项目结构和组织比较灵活,允许用户根据项目需求进行定制。

1.根目录概念:

1.1 项目根目录(Project Root)

项目根目录是整个项目在本地硬盘上的存储位置,它包含了项目所需的所有文件和目录。在 IntelliJ IDEA 中,当你打开一个项目时,你实际上是指定了这个项目的根目录。项目根目录通常包含了项目配置文件(如 .idea 目录和 .iml 文件)、源代码、库依赖、资源文件等。

1.2 内容根目录(Content Root)

内容根目录则是相对于项目中的模块(Module)而言的。在 IntelliJ IDEA 中,一个项目可以包含多个模块,每个模块都有自己的内容根目录。内容根目录用于进一步细分项目中的不同部分,例如源代码、测试代码、资源文件等。

内容根目录的设定允许你更精细地控制模块的构建路径、依赖关系以及资源文件的访问。你可以为每个模块设置不同的源代码目录、资源目录、输出目录等。

1.3 示例

假设你有一个名为 MyProject 的项目,该项目包含两个模块:CoreModuleWebModule。在本地硬盘上,MyProject 的根目录可能看起来像这样:

MyProject/ //项目根目录
|-- .idea/
|-- CoreModule/ //模块内容根目录(Content Root)
| |-- src/
| | |-- main/
| | | |-- java/ (CoreModule 的源代码)
| | | |-- resources/ (CoreModule 的资源文件)
| |-- test/
| |-- CoreModule.iml
|-- WebModule/ //模块内容根目录(Content Root)
| |-- src/
| | |-- main/
| | | |-- java/ (WebModule 的源代码)
| | | |-- resources/ (WebModule 的资源文件)
| |-- test/
| |-- WebModule.iml
|-- MyProject.iml

在这个例子中,MyProject 是项目根目录,而 CoreModuleWebModule 则分别有自己的内容根目录。每个模块的内容根目录下进一步细分了源代码目录、测试代码目录和资源文件目录。

1.4 总结:

通过 IntelliJ IDEA 的项目结构设置,你可以轻松地管理这些目录和它们的依赖关系,从而确保项目的构建和运行符合预期。

2. 路径概念:

2.1 首先,我们回顾一下目录概念:

  • 项目根目录(Project Root)

    项目根目录是整个项目在本地硬盘上的顶层目录。它包含了项目所需的所有文件和子目录,如源代码、构建文件、配置文件等。在 IntelliJ IDEA 中,当你打开一个项目时,这个项目根目录就是你在文件系统中选择的目录。
  • 内容根目录(Content Root)

    内容根目录是存储模块文件(如源代码、资源等)的目录。在 IntelliJ IDEA 中,每个模块(Module)可以有自己的 Content Root。Content Root 是模块层次结构中的顶层目录,它包含了该模块的所有相关文件和子目录。
  • 源根目录(Source Root)

    源根目录(Source Root)**:Source Root 是 Content Root 下的一个特殊类型的目录,用于存放源代码文件。在 IntelliJ IDEA 中,Source Root 用作包层次结构的根,例如 Java 源代码通常直接放在 Source Root 目录下。一个 Content Root 下可以有多个 Source Root,它们可以有不同的类型,如 srctestresources 等,用于区分不同类型的源代码或资源文件。

2.2 接下来,我们讨论路径概念:

  • 内容根路径(path from content root):这是从内容根目录到特定文件的路径。例如,如果 src 是 Content Root,那么 src/main/resources/com/itheima/mapper/UserMapper.xml 就是相对于 Content Root 的路径。
  • 源根路径(path from source root):这是从源根目录到特定文件的路径。对于 MyBatis 的映射文件,它们通常存放在资源目录(如 src/main/resources)下,该目录被标记为 Source Root。因此,com/itheima/mapper/UserMapper.xml 就是相对于该 Source Root 的路径。

2.3 MyBatis 示例

假设你有一个基于 Maven 的 MyBatis 项目,其结构如下:

MyBatisProject/ (项目根目录)
|-- .idea/
|-- pom.xml
|-- src/ (Content Root)
| |-- main/
| | |-- java/ (Source Root for Java sources)
| | | |-- com/
| | | |-- itheima/
| | | |-- mapper/
| | | |-- UserMapper.java
| | |-- resources/ (Source Root for resources)
| | |-- com/
| | |-- itheima/
| | |-- mapper/
| | |-- UserMapper.xml
|-- MyBatisProject.iml (项目模块文件)

在这个例子中:

  • 项目根目录MyBatisProject/
  • 内容根目录src/,它包含了项目的所有源代码和资源文件。
  • 源根目录 有两个:src/main/java/ 用于 Java 源代码,src/main/resources/ 用于资源文件(如 MyBatis 映射文件)。
  • 内容根路径(对于 UserMapper.xml)是 src/main/resources/com/itheima/mapper/UserMapper.xml
  • 源根路径(对于 UserMapper.xml)是 com/itheima/mapper/UserMapper.xml,这是从 src/main/resources/ 这个源根目录开始的相对路径。

在 MyBatis 的配置中,你通常会使用源根路径来引用映射文件。例如,在 mybatis-config.xml 文件中:

<configuration>
<mappers>
<mapper resource="com/itheima/mapper/UserMapper.xml"/>
</mappers>
</configuration>

这里的 resource 属性期望的是相对于类路径(classpath)的资源路径,这通常与源根路径相对应。当 IntelliJ IDEA 构建项目时,它会确保这些源根目录下的文件被包含在类路径中,从而 MyBatis 能够正确地加载映射文件。

2.4 总结:

了解这些路径概念对于在 IntelliJ IDEA 中正确配置和管理 MyBatis 项目是非常重要的。它们帮助开发者清晰地组织项目结构,并确保文件能够被正确地引用和加载。

一文搞懂idea中的根目录和路径(以Mybatis为例)的更多相关文章

  1. 一文搞懂 js 中的各种 for 循环的不同之处

    一文搞懂 js 中的各种 for 循环的不同之处 See the Pen for...in vs for...of by xgqfrms (@xgqfrms) on CodePen. for &quo ...

  2. 一文搞懂--Java中重写equals方法为什么要重写hashcode方法?

    Java中重写equals方法为什么要重写hashcode方法? 直接看下面的例子: 首先我们只重写equals()方法 public class Test { public static void ...

  3. 一文搞懂 SLAM 中的Extension Kalman Filter 算法编程

    作者 | Doreen 01 问题描述 预先知道事物未来的状态总是很有价值的! √ 预知台风的路线可以避免或减轻重大自然灾害的损失. √ 敌国打过来的导弹,如果能够高精度预测轨迹,就能有效拦截. √ ...

  4. 一文搞懂Python中的所有数组数据类型

    关于我 一个有思想的程序猿,终身学习实践者,目前在一个创业团队任team lead,技术栈涉及Android.Python.Java和Go,这个也是我们团队的主要技术栈. Github:https:/ ...

  5. 一文搞懂 Java 中的枚举,写得非常好!

    知识点 概念 enum的全称为 enumeration, 是 JDK 1.5 中引入的新特性. 在Java中,被 enum关键字修饰的类型就是枚举类型.形式如下: enum Color { RED, ...

  6. 一文搞懂js中的typeof用法

    基础 typeof 运算符是 javascript 的基础知识点,尽管它存在一定的局限性(见下文),但在前端js的实际编码过程中,仍然是使用比较多的类型判断方式. 因此,掌握该运算符的特点,对于写出好 ...

  7. 一文搞懂│php 中的 DI 依赖注入

    目录 什么是 DI / 依赖注入 依赖注入出现的原因 简单的依赖注入 高阶的依赖注入 依赖注入的应用 依赖注入高阶优化 什么是 DI / 依赖注入 依赖注入DI 其实本质上是指对类的依赖通过构造器完成 ...

  8. 一文搞懂│mysql 中的备份恢复、分区分表、主从复制、读写分离

    目录 mysql 的备份和恢复 mysql 的分区分表 mysql 的主从复制读写分离 mysql 的备份和恢复 创建备份管理员 创建备份管理员,并授予管理员相应的权限 备份所需权限:select,r ...

  9. 一文彻底搞懂Java中的环境变量

    一文搞懂Java环境变量 记得刚接触Java,第一件事就是配环境变量,作为一个初学者,只知道环境变量怎样配,在加上各种IDE使我们能方便的开发,而忽略了其本质的东西,只知其然不知其所以然,随着不断的深 ...

  10. 三文搞懂学会Docker容器技术(中)

    接着上面一篇:三文搞懂学会Docker容器技术(上) 6,Docker容器 6.1 创建并启动容器 docker run [OPTIONS] IMAGE [COMMAND] [ARG...] --na ...

随机推荐

  1. JS Leetcode 81. 搜索旋转排序数组 II 题解,补救二分法的可行性

    壹 ❀ 引 今日LeetCode题为153. 寻找旋转排序数组中的最小值,在10个月前,我已在JS leetcode 寻找旋转排序数组中的最小值 题解分析,你不得不了解的二分法一文中写了本题的题解,所 ...

  2. NC17508 指纹锁

    题目链接 题目 题目描述 ​ HA实验有一套非常严密的安全保障体系,在HA实验基地的大门,有一个指纹锁. ​ 该指纹锁的加密算法会把一个指纹转化为一个不超过1e7的数字,两个指纹数值之差越小,就说明两 ...

  3. 51单片机(STC89C52)的中断和定时器

    STC89C51/STC89C52 Timer 内部不带振荡源, 必须外接晶振 采用11.0592MHz,或22.1184MHz,可方便得到串口通讯的标准时钟. STC89和STC90系列为12T, ...

  4. Js中Math对象

    Js中Math对象 Math是一个内置对象,它拥有一些数学常数属性和数学函数方法,Math用于Number类型,其不支持BigInt. 描述 Math不是一个函数对象,也就是说Math不是一个构造器, ...

  5. 为什么华为今年疯狂招od?

    不知道的大家有没有发现 这两年市场不好公司用人需求紧缩 唯有华子疯狂招人 很多人都听过华为OD 但是具体是什么还是有很多人疑惑 总结以下三个部分: 1.为啥疯狂招od而不是之前的纯"外包&q ...

  6. error C2039: "function": 不是 "std" 的成员的解决方法

    这个错误通过某度没找到合适的解决方案,故记录下来 其实如果使用 google 搜索错误的英文关键词,大概第一条就是解决问题的链接 Large number of "'function' is ...

  7. centos7.5 hadoop NAT 静态IP网络环境搭建

    1 设置 VMware 网络环境 1. 选择VMNet8 并将子网IP 修改为 192.168.10.0,保证集群ip都在这个网段下 2. 选择NAT 设置,配置NAT的网关为 192.168.10. ...

  8. 使用Java线程同步工具类CountDownLatch

    java.util.concurrent.CountDownLatch是Java并发并发编程中的线程同步工具类,基于AQS(java.util.concurrent.locks.AbstractQue ...

  9. 文件IO操作开发笔记(二):使用Cpp的ofstream对磁盘文件存储进行性能测试以及测试工具

    前言   在做到个别项目对日志要求较高,要求并行写入的数据较多,尽管写入数据的线程放在子线程,仍然会造成界面程序的假死(实际上Qt还是在跑,只是磁盘消耗超过瓶颈,造成假死(注意:控制台还能看到打印输出 ...

  10. core-js/modules/es7.arrat......................报错

    拉入代码之后出现如图提示,导致原因是因为core-js版本太高,可以用cnpm install core-js@2成功解决,安装一个项目前最后将node-moudel删除,重新安装