2

我正在开发一个包含多个组件的 Eclipse 插件。以前这是一个插件,一切都很好。但是,我最近将其分解为多个插件,它们是单个功能的一部分。

结构是功能中有一大堆插件。有一个包含通用代码和库的“核心”插件。每个其他插件都依赖于核心插件。

问题是当插件编译良好并且没有关于 plugin.xml、manifest 等的警告时,由于缺少类,插件在运行时无法工作。具体来说,我在核心插件中有 Google Guava,在运行时找不到 Guava jar 中的类。还有其他罐子,但这是第一个爆炸的罐子。

我尝试了几种方法来解决这个问题:

  • 在核心项目中导出 Guava jar 中包含的包具有相同的结果:不起作用。
  • 将 Guava jar 放入每个插件中确实有效,但由于额外的大小是不可取的。
  • 根据我的搜索,我可以在我的 plugin.xml 中添加一个 <runtime> 标记,Eclipse 会立即忽略它,因为我有一个清单。我还没有找到向清单添加等效设置的方法。

唯一可行的方法是创建一个库插件,它基本上解压缩并合并所有 jar 文件。这里的问题是我有一堆随机文件。如果我想升级 jar 文件,重新生成项目很繁琐,而且我怀疑在搜索项目的 SVN 历史记录时会很清楚。

是否有另一种方法可以轻松地放入更新的 jar 文件并使其以最少的更改工作?

4

2 回答 2

1

在核心项目中导出 Guava jar 中包含的包具有相同的结果:不起作用。

你有没有想过这个?

据我所知,在 Eclipse Equinox 中是 OSGi 容器,而在 OSGi 中,我们可以使用其他捆绑资源。

因此,请确保您从正确的位置导出正确的内容。

可能,其他包无法识别从核心包导出的类(在所有子包中检查 import-package)或类加载器中的某些错误。

尝试在清单中使用“Eclipse-Buddy 策略”属性。它可能工作:-)

于 2013-06-04T13:11:43.113 回答
0

我所做和工作的事情是:

  1. 创建一个Maven项目并将所有依赖项放在那里
  2. 编写代码,包括算法,以及插件/应用程序的所有逻辑
  3. 构建项目。您将拥有一个大jar文件。类似“myproject-with-dependencies.jar”的东西
  4. 在 Eclipse 中:
    1. 右键单击 -> 来自现有 JAR 档案的插件。 在此处输入图像描述
    2. 从步骤 3 中选择您的 jar 文件。
    3. 检查您的 plugin.xml 并仅导出所需的包(以避免 Osgi 中的 ClassCastExpeption)
  5. 最后从你拥有的其他插件中添加一个依赖于这个插件

笔记:

  • 这就是我用来避免 p2 站点以及捆绑包的 jar(特别是因为我使用 Tycho 构建我的 Eclipse 插件)。
  • 这不是最好的解决方案,但会为您节省大量时间。相信我!
于 2014-01-09T01:31:22.420 回答