classpath:/ 与 classpath*:/ 引发的问题总结

本文详细解析了classpath与classpath*的区别,包括它们在Spring配置文件中的使用方式及其对文件加载的影响。并介绍了如何避免因classpath配置不当而导致的问题。

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

概念介绍:

classpath:是指WEB-INF文件夹下的classes目录


tomcat-7.0.50 目录结构及作用

                bin: 存放tomcat的命令

                conf:存放tomcat的一些配置文件

                lib:存放tomcat运行需要加载的jar包

                logs:存放tomcat运行过程中产生的日志文件

                temp:存放tomcat运行过程中产生的临时文件

                webapps:存放应用程序

                work:存放tomcat运行时的编译后文件,例如jsp编译后的文件

              

classes:是指项目部署后存放class文件xml文件jar包的文件夹

                  以tomcat部署项目为例 文件路径  E:\tools\apache-tomcat-6.0.44\webapps\项目name\WEB-INF\classes


问题说明:

在spring配置文件中,通过 classpath*:/xxx.xml 引入了  外部配置文件 然后在运行junit单元测试的时候 报错xxx.xml 配置文件中的一个bean 注入失败;


classpath与 classpath* 区别

classpath 是精确查找   classpath* 是模糊查找

classpath : 只会到你的class路径中查找文件。

classpath* : 不仅包含class路径,还包括jar文件中(class路径)进行查找。

classpath*:需要遍历所有的classpath,所以加载速度很慢;当项目中有多个classpath路径,并同时加载多个classpath路径下的文件,*就会加载所有classpath下的文件

                    不加*只会加载第一个classpath路径下的文件。


我的问题:

问题的本质是 通过手动加载上下文 没有找到目标类,也就是说目标类并没有被加载。

没有被加载的原因是 spring引入外部文件的时候 外部文件名称写错了。


总结:
1、不需要*的不要加,不然会影响报错信息导致不能快速的找到问题所在(当我将*去掉的时候,很明显的报错说 文件加载失败,原因是目标文件不存在)

2、文件要有同意的命名规范,可以防止因为习惯问题导致的错误。

[hadoop@master flume]$ bin/flume-ng agent -n a2 -c conf -f job/spooldir-flume-hdfs.conf -Dflume.root.logger=INFO,console Info: Sourcing environment configuration script /opt/module/flume/conf/flume-env.sh Info: Including Hadoop libraries found via (/usr/local/hadoop/bin/hadoop) for HDFS access Info: Including HBASE libraries found via (/usr/local/hbase/bin/hbase) for HBASE access Info: Including Hive libraries found via () for Hive access + exec /usr/local/jdk1.8/bin/java -Xmx20m -Dflume.root.logger=INFO,console -cp '/opt/module/flume/conf:/opt/module/flume/lib/*:/usr/local/hadoop/etc/hadoop:/usr/local/hadoop/share/hadoop/common/lib/*:/usr/local/hadoop/share/hadoop/common/*:/usr/local/hadoop/share/hadoop/hdfs:/usr/local/hadoop/share/hadoop/hdfs/lib/*:/usr/local/hadoop/share/hadoop/hdfs/*:/usr/local/hadoop/share/hadoop/mapreduce/lib/*:/usr/local/hadoop/share/hadoop/mapreduce/*:/usr/local/hadoop/share/hadoop/yarn:/usr/local/hadoop/share/hadoop/yarn/lib/*:/usr/local/hadoop/share/hadoop/yarn/*:/usr/local/hbase/conf:/usr/local/jdk1.8/lib/tools.jar:/usr/local/hbase:/usr/local/hbase/lib/shaded-clients/hbase-shaded-client-2.1.0.jar:/usr/local/hbase/lib/client-facing-thirdparty/audience-annotations-0.5.0.jar:/usr/local/hbase/lib/client-facing-thirdparty/commons-logging-1.2.jar:/usr/local/hbase/lib/client-facing-thirdparty/findbugs-annotations-1.3.9-1.jar:/usr/local/hbase/lib/client-facing-thirdparty/htrace-core4-4.2.0-incubating.jar:/usr/local/hbase/lib/client-facing-thirdparty/log4j-1.2.17.jar:/usr/local/hbase/lib/client-facing-thirdparty/slf4j-api-1.7.25.jar:/usr/local/hbase/lib/client-facing-thirdparty/htrace-core-3.1.0-incubating.jar:/usr/local/hadoop/etc/hadoop:/usr/local/hbase/conf:/lib/*' -Djava.library.path= org.apache.flume.node.Application -n a2 -f job/spooldir-flume-hdfs.conf SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/opt/module/flume/lib/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: Found bin
03-29
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值