Spring项目下的路径问题(详解及原理)

本文探讨了在Spring项目中使用log4j2时,如何处理配置文件的路径问题。作者指出,相对于绝对路径,相对路径具有更好的移植性。在SpringBoot中,配置文件可以使用以项目根目录为起点的相对路径。文章解释了classes文件夹的作用,它是存放编译后的.class文件和资源文件的地方。同时,文章还介绍了Linux和Windows中路径符号'/ '的含义,并展示了如何正确设置路径避免自动创建文件在错误的位置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Spring项目下的路径问题

​ 今天做SpringBoot整合log4j2,但在设置log4j2的配置文件时,其他作者建议强调要用绝对路径,但用绝对路径移植性真的很差,于是尝试使用相对路径,于是乎,便有了这篇总结。

说明举例
相对路径相对于当前位置的路径./intel/facereapi
绝对路径路径的绝对位置(唯一表示方法)E:\workSpace\intelJ\facereapi

需要注意的是:相对路径用正斜杠 ‘/’ 绝对路径用的反斜杠 ’ \ ’

在路径方面,不得不提的是classPath,在Eclipse和Idea中,这两个位置是不同的。

指定位置
EclipseWEB_INF/classes
IDEAtarget/classes

虽然路径不同,但最终都是指向了classes文件夹。

那这个classes文件是用来放什么的呢?

通过编译器,我们将 *.java 文件会全部编译成为 *.class 文件,而这个classes就是存储 *.class文件的。
在这里插入图片描述

首先看一下笔者的包结构

在这里插入图片描述

同时看一下classes文件中的文件

在这里插入图片描述

classes中也有项目中对应的包,也就是说,编译器在编译java文件的同时,同时也创建了文件夹。

classes文件夹中也存放了 *.class文件与 *.yml等文件。因为这些文件夹都被创建在classes中,,所以classPath都能访问。而以上这些文件,对应的是src/main下的java文件以及resource文件,所以看起来像是,classPath访问的是这两个文件夹,但实际上classPath访问的是classes文件。

这样就不难理解classPath作用原理。

同时,笔者在看到其他的博客,有提到classPath与classPath*的区别

classPath:只会到你的class路径中查找找文件;
classPath*:不仅包含class路径,还包括jar文件中(class路径)进行查找.

路径符号 ’ / ’ 的理解

​ 在Linux中,我们知道:

​ ~ :代表家目录

​ / :代表根目录

​ 在Windows中,‘ / ’ 同样适用。

在这里插入图片描述
​ 上图中的两行代码,用于测试路径用的。运行结果如下

在这里插入图片描述

​ 我们可以看到,在使用 “ / ”的情况下,位置回到了classes文件的根目录下(因为使用的是Main.class),而 “” 相当于家目录。

​ 这样也就不难理解,因为路径写错,而自动创建文件的创建位置了。(笔者在项目的根目录中,运行项目时,自动生成了/classPath/log文件)

在这里插入图片描述
所以使用相对,在xml的配置文件中,也不一定没要用绝对路径,只需要以项目的根目录为起点,做相对路径即可,如图。

在这里插入图片描述
最终,相对路径成功,日志自动进入log。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值