SpringBoot中的classpath

一句话总结:classpath 等价于 main/java + main/resources + 第三方jar包的根目录。下面详细解释。

首先,classpath顾名思义,是编译之后项目的路径,而不是对源程序的路径描述。但是它与源程序的一些路径是相互对应的,存在映射关系。

需要介绍一下package打包、build 之间的关系及特点:

  1. ​ 不管是build还是package,都不会把项目中使用的第三方jar包也一起打进去。

  2. build生成了如下的目录:
    在这里插入图片描述

    由图可以看出,build将项目进行编译,main/java下的源程序、resource下的静态资源一起打包到了target/classes目录。而package也差不多:

在这里插入图片描述
这里的target/classes和jar包根路径 都属于所谓的 classpath,也就是根路径。

  1. 打包和构建都会在根路径下创建META-INF文件夹,如果在resource文件夹中再创建一个META-INF文件夹,并在该文件夹中建立其他的静态资源,这些自己创建的静态资源在打包或构建时也会一起打包到classpath:/META-INF文件夹下。

  2. 知道了这一特性之后就可以解释项目中对webjars下的静态资源引用的问题了。以jQuery为例:webjars官方将jQuery.js文件放到resources/META-INF/resources/webjars/中,然后将项目打包并发布,就有了我们需要的jar包。我们回忆一下如果要引用一般的jar包内的类需要怎么操作呢?import ort.xxx.xxx,这里的 “org.xxx ” 其实就是"classpath:/org.xxx.xxx";这个jQuery的jar包是一样的道理:

    在这里插入图片描述

    要引用jquery,只需要引用META-INF/resources/xxx,这句话的其实就是在说classpath:/META-INF/ resouces/…因此我们还可以了解到,实际上所有External Libraries中的jar包也属于classpath根路径。当SpringBoot检索资源时,“/”就代表了从根路径搜索,而搜索的范围包括:main/java、main/resources、第三方jar包的根目录。

posted @ 2020-10-17 17:05  Eden李秉秉秉秉  阅读(3582)  评论(1编辑  收藏  举报