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