ClassLoader#getResource()
方法是否使用不同的API来加载资源,具体取决于调用它的上下文?特别是,我想知道:当它在JAR上下文中调用时,此方法是否使用ZipFile#open()
,并且当它从IDE调用时它是否使用File
api(没有打包到JAR)?
我问,因为我有以下问题:在启动JAR文件后,它动态地(在运行时)添加到它自己的位于文件系统上的类路径新目录,当我从IDE运行它时,所有工作正常,但是当我打包我的应用程序时到JAR它停止工作 - 我得到例外:
Caused by: java.io.FileNotFoundException:
at java.util.zip.ZipFile.open(Native Method)
所以我认为这是因为JAR上下文中的ClassLoader#getResource()
方法始终使用ZipFile
类来访问文件和目录,但不应通过{{1}访问动态添加到类路径的目标目录} class(应该使用简单的ZipFile
类访问它。)