使用Eclpise(和其他工具(,可以在另一个jar中包含依赖jar(参见此答案(。当 Eclipse 这样做时,它会生成一个自定义类加载器,因为"经典"类加载器无法在另一个 jar 内的 jar 中找到类。
为了创建我的jar(package.final.jar
(,我:
-导入了jar以包含在(dep.jar
(我的项目中的libs/
文件夹中;
- 在清单中添加了dep.jar
。MF ->运行时 ->类路径(因此它将行Bundle-ClassPath: libs/dep.jar,.
添加到我的清单中(;
- 将我的项目导出为可部署的插件和片段。
package.final.jar
只包含这个结构:
-META-INF/MANIFEST.MF
-package/-class1.class
-class2.class
.
.
.
-libs/dep.jar
所以我想知道,Eclipse 创建的自定义类加载器在哪里?
对于 Eclipse 插件,插件清单中的Bundle-ClassPath
条目。MF 告诉 Eclipse/OSGi 系统主插件 jar 中的哪些类和 jar 是类路径的一部分。
插件jar 中没有添加额外的代码,Eclipse 类加载器处理包含的 jar。
因此,只要清单,您就可以随心所欲地构建 jar。MF 是正确的。如今,使用 maven + Eclipse 第谷很常见。
你的jar里应该有以下文件夹: org/eclipse/jdt/internal/jarinjarloader
包含类加载器等:
- JIJConstants.class
- JarRsrcLoader$ManifestInfo.class
- JarRsrcLoader.class
- RsrcURLConnection.class
- RsrcURLStreamHandler.class
- RsrcURLStreamHandlerFactory.class
如果您查看 META-INF/MANIFEST,您也可以检查它。MF 文件以查看设置了什么主类