【发布时间】:2019-12-30 17:21:57
【问题描述】:
使用 Eclpise(和其他工具),可以在另一个 jar 中包含一个依赖 jar(参见 this answer)。当 Eclipse 这样做时,它会生成一个自定义类加载器,因为“经典”类加载器无法在另一个 jar 中的 jar 中找到一个类。
要创建我的 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 创建的自定义类加载器在哪里?
【问题讨论】:
-
'可部署插件和片段'用于 Eclipse 插件(或片段)。这些与普通的罐子非常不同。 Eclipse / OSGi 插件类加载器处理这些。
-
@greg-449 好的,但是到底有什么不同呢?我可以看到清单是不同的,但是罐子里还有其他区别吗?
-
MANIFEST.MF 的区别是关键。
Bundle-Classpath告诉 Eclipse / OSGi 插件系统如何处理包含的 jar - 没有其他东西可以理解清单中的这个条目。它仅在作为 Eclipse 插件(或另一个 OSGi 容器)安装时才有效。 -
@greg-449,好的,就这么简单!所以如果我手动创建一个jar(使用命令行),并用
Bundle-Classpath放一个MANIFEST.MF,插件系统也会知道如何处理包含的jar? -
只要 MANIFEST.MF 正确,您可以随意构建它。如今,大多数 Eclipse 插件都是使用 maven + tycho 构建的。以后如果您询问 Eclipse 插件,请说出来并使用eclipse-plugin 标签。
标签: java eclipse jar eclipse-plugin