在Eclipse中从程序上安装Eclipse插件?

6
我想创建一个自动安装程序,用于安装Eclipse插件(即不通过“更新管理器”)。我的情况很简单:用户关闭Eclipse,将下载的JAR文件放入dropins文件夹中,启动Eclipse,其余过程都是自动化的。
在旧版Eclipse中,在P2时代之前,Eclipse有(仍然有)一个称为InstallCommand的类,可用于将插件安装到当前运行的平台中。
虽然这在Eclipse 3.4和3.5中仍然有效,但它的表现不正常:最明显的是,以这种方式安装的插件无法自动卸载(变灰)。
JavaDoc声称InstallCommand已被弃用,应该使用P2替代方案。但是,我找不到适合此工作的正确工具。有P2 director,但它是为从命令行运行而构建的独立应用程序。可以从Eclipse内部调用它,但它确实不适合那样做。例如,进度监视和错误报告无法正常工作。
有人知道好的替代方案吗?
谢谢, Zviki

通常将功能和插件解压到dropins文件夹下就足以安装插件了。您还想做什么? - Aaron Digulla
1
是的。然而,我有一个商业插件,我正在尝试创建更加用户友好的体验。将其放入dropins文件夹中可能会失败,错误报告在这种情况下不太明显。并非所有的Eclipse用户都是能够追踪问题并解决问题的Eclipse专家。 - zvikico
如果你在安装时自己操作,那么升级时也最好自己动手。 - AlBlue
1
@Al,不需要。Eclipse的更新机制会自动完成。问题在于:当人们访问您的网站并决定尝试您的软件时,他们想要下载。在大多数情况下,他们不会立即安装,而是稍后再安装。如果您只留下更新URL,那么您将失去客户,这是肯定的。这就是为什么下载和安装程序很重要。我应该写一篇博客来谈论这个问题... - zvikico
3个回答

1

Dropins 看起来非常接近你想要的,特别是如果它们只是下载没有关联元数据的 jar 包(即元数据需要自动生成)。

你可以考虑定义第二个 dropins 区域来进行管理。查看 org.eclipse.equinox.p2.reconciler.dropins 中的 ProfileSynchronizer,特别是 createProfileChangeRequest 方法。我认为你不喜欢的卸载行为是由于添加了 IInstallableUnit.PROP_PROFILE_LOCKED_IU 属性造成的。

dropins 在启动时进行协调,请参阅 p2.reconciler.dropins Activator.watchDropins(),你可以从自己的 bundle 中执行相同的操作以监视另一个文件夹。


谢谢。我不想复制dropins的行为。关于PROFILE_LOCKED - 这不是我做的,所以可能是一个bug(尽管我怀疑在这个阶段没有人会费心去修复它)。 - zvikico
PROFILE_LOCKED 在当前的 p2 代码中,我知道它是有意放置的,但我不确定背后的原因。 - Andrew Niefer
我现在会选择dropins解决方案(在大多数情况下都有效),但我可以想到更好的建议。类似于JAR,但具有不同的后缀(如EAR或WAR,也可以是OSGi的OAR)。它将与Eclipse相关联,因此双击将调用Eclipse。它将打包更新站点,包含指向更新站点的URL或要在当前OSGi运行框架中调用的可执行文件。我会整理我的想法并打开一个问题来建议它。 - zvikico
@zvikico 这个 OAR 的想法听起来很有趣(类似于许多打包解决方案)。你为此提出了一个 bug 吗? 另外,当你说“不想复制 dropins 行为”时,你实际上是什么意思?主要的区别在于,你会有一些带有进度条和其他东西的 UI 吗?(我认为这对于股票 P2 也是很好的...但谁知道似乎 dropins 机制已经过时了(请参见 https://dev59.com/xnI-5IYBdhLWcg3wu7BU 的一个 bug) - inger

0
我建议将您的插件部署为可执行的JAR文件。 JAR中的安装程序应该要求Eclipse安装目录并将插件解压到正确的位置(还需要进行一些其他检查)。
可以选择包括一个小的“看门狗”插件,它不依赖于太多内容,只需检查您的主插件是否正确加载并显示有用的错误消息,用户可以通过电子邮件向您寻求支持。

这是一个不错的选择,我自己也考虑过。但是,你仍然需要在目标平台上执行配置操作。你不应该假设有一个标准的插件/特性目录结构,而是让P2处理安装。这会让你回到原点...怎么办? - zvikico
在P2新闻组中询问和/或对P2 Director提出错误报告? - Aaron Digulla
1
这是P2导演的一个可能的增强功能,我可以建议它。至于P2组:我更喜欢StackOverflow,并且在这里通常可以得到更多答案。我在Eclipse新闻组中提出的大多数问题都被忽视了。 - zvikico

0
根据 bug 311590 1 中的信息,该 bug 在 InstallCommand 的弃用注释中提到了可能使用 P2 操作 23 作为替代方案。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接