java的ClassLoader从配置的classpath路径下加载类文件,但是项目编译完以后又不是放在classpath路径下面,那么类加载器是如何加载项目源码的?

sfasdfasdfasf 发布于 2020/11/25 18:34
阅读 161
收藏 0

java的ClassLoader从配置的classpath路径下加载类文件,但是项目编译完以后又不是放在classpath路径下面,那么类加载器是如何加载项目源码的?

加载中
0
bug操手
bug操手

如果你是开发了一个Cli程序,然后又依赖的一些外部jar,那你执行的时候需要带一个命令行参数classpath,将你用到的jar包包含在classpath参数路径中。

如果你是开发了一个springboot程序,打包为了一个标准可执行jar包。这个jar中的MANIFEST.MF文件有点特殊,main程序为Main-Class: org.springframework.boot.loader.JarLauncher, 当执行java -jar命令或执行解压后的org.springframework.boot.loader.JarLauncher类时,JarLauncher会将BOOT-INF/classes下的类文件和BOOT-INF/lib下依赖的jar加入到classpath下,后调用META-INF/MANIFEST.MF文件Start-Class属性完成应用程序的启动。 具体可以自己解压一份jar包看看。

 

0
炎黄伙哥
炎黄伙哥

那是不可能的,你说的classpath大概是你配的环境变量,但classpath不是只能通过这一种方式配置的,最基本的通过java命令执行main方法,他是可以通过java -cp 来指定classpath的,再比如你用eclipse开发,项目目录下会有个.classpath文件来指定,再比如spring boot的jar包,里面也有文件去指定,任何方式运行java代码都会有他自己指定classpath的方式,只是你可能不知道

炎黄伙哥
炎黄伙哥
回复 @Jordan裔 : 正确
sfasdfasdfasf
sfasdfasdfasf
是不是意思 一个springboot项目有两个classpath? 一个是安装jdk的时候配置的一个classpath用来项目去读取jdk封装的类的, 还有一个项目本身编译后的classpath用来读取项目源码的?
0
kakai
kakai

继承URLClassLoader实现的自定义类加载器,classpath、lib随便指定,我曾参考jetty的Web容器实现改了个ClassLoader,可以在运行时热加载程序运行。

OSCHINA
登录后可查看更多优质内容
返回顶部
顶部