【问题标题】:Can I update an Eclipse plugin project, which is simply a wrapper around a jar?我可以更新一个 Eclipse 插件项目,它只是一个 jar 的包装器吗?
【发布时间】:2010-10-16 10:20:11
【问题描述】:

您好, 我有一个 java 项目,我将其导出为 jar。这个java项目也使用了JNI。 到目前为止,我能找到在 Eclipse 插件中使用这个 jar 的唯一方法是将它包装在另一个 Eclipse 插件项目中,并将这个 jar 包装器插件添加到我实际插件的依赖项中。 几天来,我一直在与 Eclipse 的路径和依赖项设置搏斗,而这种方法是目前唯一适合我的方法。 但是,这不是很实用,因为当我更改基于 JNI 的 java 代码时,我可以简单地创建一个新的 jar,但是要将那个 jar 连接到我的实际插件,我每次都必须重新创建 jar 包装器插件。 也就是说,我删除了 jar 包装器插件项目,所有内容都在磁盘上,然后使用相同的名称重新创建它,指向更新的 jar。我还必须从实际的插件项目中删除对该项目的引用并再次添加(也许这最近变得更聪明了,但我没有测试它)

这很耗时,而且我也无法将此包装插件项目添加到 svn,因为它每次都是从头开始创建的。

如果我可以通过指向新版本的 jar 来简单地更新一个 jar 包装 eclipse 插件项目,那将解决我的问题,并且我可以在每次更新后将项目提交到 svn。

你能想到什么方法可以帮助我顺利运行这个过程吗?

最好的问候 自我介绍

【问题讨论】:

  • 为什么每次都要重新创建包装器项目?只需替换其中的jar文件即可。
  • 在Eclipse中,有一种特定类型的插件项目,基本上就是提取一个jar包,然后包装成一个插件。这是 JNI 代码工作的唯一方式,因为本机 dll 已正确提取,然后由 Eclipse 运行时找到。因此,每次原生 dll 或 jni 代码发生变化时,都必须重复这个过程。

标签: eclipse plugins jar


【解决方案1】:

仅 Equinox(即非标准 OSGi)在 OSGi 包中使用外部库而不物理包装它们的方法是通过引用进行捆绑:您仍然需要一个包装器插件,但它不包含包装的库本身,而是一个在捆绑清单的 Bundle-Classpath 标头中引用,语法如下:

Bundle-Classpath: external:/path/to/your/lib.jar

在开发期间,这非常方便,并且在更新包装库时省去了重新创建包装器插件的工作。在部署期间,您要么必须随产品一起安装库,要么使用传统的包装插件(包含实际库的插件)。您也可以对 bith 用例使用相同的包装器插件,但将 Bundle-Classpathexternal:/stuff/lib.jar 更改为 libs/lib.jar,具体取决于您是要使用包装的库还是外部库。

(其中大部分来自OSGi and Equinox - Creating Higher Modular Java Systems 一书,我不太喜欢这本书,但其中包含有关 Equinox(Eclipse 的 OSGi 实现)和PDE 构建系统。)

【讨论】:

  • 如果它与 JNI 一起工作(这在路径等方面是一场噩梦),这将是一个很好的开发时间解决方案。由于我没有这本书,请问是否可以使用bundle-classpath值来引用eclipse中的相​​对路径? external:... 需要配置一个 out of eclipse 路径..
  • 它与环境变量一起工作,因此在开发过程中,您可以定义一个指向您的工作区的环境变量(我们称之为$EXTERNAL_DEPS)并使用external:$EXTERNAL_DEPS/some_project/libs/lib.jar捆绑类路径。另一方面,如果您需要提取本机库或将包部署为目录而不是 JAR,我不确定您从我的建议中获得了多少。我不知道 Bundle-NativeCode 是否允许使用 Bundle-Classpath 可能的外部内容。
猜你喜欢
  • 1970-01-01
  • 2018-12-02
  • 2013-05-27
  • 1970-01-01
  • 2012-11-26
  • 2017-11-02
  • 1970-01-01
  • 1970-01-01
  • 2011-11-05
相关资源
最近更新 更多