在Eclipse插件中导出jar库

时间:2013-06-04 12:57:44

标签: java eclipse eclipse-plugin

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

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

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

我尝试了几种解决方法:

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

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

是否有另一种方法可以实现这一目标,这样可以轻松放入更新的jar文件并使其以最小的更改工作?

2 个答案:

答案 0 :(得分:1)

  

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

您对此感到疑惑吗?

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

所以,这里确保你从正确的地方输出正确的东西。

其他包可能无法识别从核心包中导出的类(在所有子包中检查import-package)或者 在课堂上发生的事情。

尝试在清单中使用“Eclipse-Buddy policy”属性。它可能有效: - )

答案 1 :(得分:0)

我做的和工作的是:

  1. 创建一个Maven项目并将所有依赖项放在那里
  2. 编写代码,包括算法和插件/ app的所有逻辑
  3. 构建项目。你将有一个很大的 jar 文件。像“myproject-with-dependencies.jar”
  4. 之类的东西
  5. 在Eclipse中:
    1. 右键单击 - >来自现有JAR档案的插件。 enter image description here
    2. 从步骤3中选择您的jar文件。
    3. 检查plugin.xml并仅导出所需的包(以避免Osgi中的ClassCastExpeption)
  6. 最后从您拥有的其他插件中添加对此插件的依赖
  7. 注意:

    • 这是我使用的,以避免p2站点和jar包(特别是因为我使用Tycho来构建我的Eclipse插件)。
    • 这不是最佳解决方案,但可以节省大量时间。相信我!