当使用 jar 内的 jar 时,Eclipse 生成的自定义类加载器在哪里?



使用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 文件以查看设置了什么主类

最新更新