【问题标题】:Eclipse p2 alternative for custom install handlers用于自定义安装处理程序的 Eclipse p2 替代方案
【发布时间】:2011-05-24 20:04:00
【问题描述】:

在 p2 之前,可以编写一个自定义安装处理程序,该处理程序具有在安装期间执行任何“自定义”任务的功能。

我看到 p2 不再支持自定义安装处理程序。 我一直听说“自定义接触点”可以替代它。

但是我找不到任何具体的示例/文档。

谁能告诉我如何使用 p2 更新管理器获取自定义安装处理程序的功能。

编辑:我想做的事情的描述 -

我需要编辑 eclipse.ini 文件并将 -Xmx 属性设置为基于我们是在 64 位还是 32 位环境中运行的值。

编辑 2: 我尝试使用以下行在我的功能中创建一个 p2.inf 文件 -

instructions.install = \
addJvmArg(jvmArg:-Xmx900m);

instructions.install.import= \
org.eclipse.equinox.p2.touchpoint.eclipse.addJvmArg,

它可以工作,但是它不区分 32 位和 64 位。

【问题讨论】:

  • 您不需要为此使用自定义接触点。我很确定您可以在产品定义中指定 JVM 参数。
  • 如何检查一个运行的是 64 位还是 32 位?
  • 嗯。也许那是不可能的。

标签: eclipse installation p2 pde


【解决方案1】:

p2.inf 绝对是执行自定义操作的正确位置。这是将 vm 参数添加到 .ini 的好地方。您可以在您的功能/插件下放置一个 p2.inf

12 月 20 日更新

我在自己的环境中尝试过,在 linux 32 位和 64 位上安装相同功能时设置不同的 vm 参数效果很好。你可以下载example code来玩玩。

#create a requirement on the IU fragment we are creating
requires.2.namespace=org.eclipse.equinox.p2.iu
requires.2.name=configure.com.example.yourfeature.linux.x86
requires.2.range=[1.0.0,1.0.0]
requires.2.greedy=true
requires.2.filter=(&(osgi.os=linux)(osgi.arch=x86))

#create a IU frament named configure.com.example.yourfeature.linux.x86 for linux 32 bit
units.0.id=configure.com.example.yourfeature.linux.x86
units.0.version=1.0.0
units.0.filter=(&(osgi.os=linux)(osgi.arch=x86))
units.0.provides.1.namespace=org.eclipse.equinox.p2.iu
units.0.provides.1.name=configure.com.example.yourfeature.linux.x86
units.0.provides.1.version=1.0.0
units.0.instructions.configure=addJvmArg(jvmArg:-Xmx500m);
units.0.instructions.configure.import=org.eclipse.equinox.p2.touchpoint.eclipse.addJvmArg,

#create a requirement on the IU fragment we are creating
requires.3.namespace=org.eclipse.equinox.p2.iu
requires.3.name=configure.com.example.yourfeature.linux.x86_64
requires.3.range=[1.0.0,1.0.0]
requires.3.greedy=true
requires.3.filter=(&(osgi.os=linux)(osgi.arch=x86_64))

#create a IU frament named configure.com.example.yourfeature.linux.x86_64 for linux 64 bit
units.1.id=configure.com.example.yourfeature.linux.x86_64
units.1.version=1.0.0
units.1.filter=(&(osgi.os=linux)(osgi.arch=x86_64))
units.1.provides.1.namespace=org.eclipse.equinox.p2.iu
units.1.provides.1.name=configure.com.example.yourfeature.linux.x86_64
units.1.provides.1.version=1.0.0
units.1.instructions.configure=org.eclipse.equinox.p2.touchpoint.eclipse.addJvmArg(jvmArg:-Xmx900m);

【讨论】:

  • 似乎不起作用 :( 我什至删除了 units.o.filter 行。另外,如果我对该行正确:units.0.hostRequirements.1.name=com.example.yourfeature功能名称必须替换为我的功能的实际 ID。
  • 有什么办法可以调试这个吗?
  • 你如何部署你的功能?使用 PDE 导出或 PDE 构建?您可以通过这两种方式远程调试,将断点添加到 org.eclipse.equinox.p2.publisher.eclipse.AdviceFileAdvice 类
  • 更新示例代码。您将尝试部署示例 rcp 的存储库以查看 content.xml 以供参考。
  • 凯恩,更新后的代码似乎也不起作用。顺便说一句,尽管按照这个思路,如何修改它以检查 32 位版本,以便可以为 32 位设置较低的 xmx 值,为 64 位设置更高的值?
【解决方案2】:

我认为关于这件事最完整的文档是Eclipse wiki。您可能对“本机接触点操作”感兴趣,但也可以实现自己的接触点操作,即在安装过程中调用的 Java 类。

编辑:Customizing Metadata 包含一些关于可以放入 p2.inf 文件的信息。那里给出的例子是:

 instructions.install = \
    ln(targetDir:@artifact,linkTarget:foo/lib.1.so,linkName:lib.so);\
    chmod(targetDir:@artifact,targetFile:lib/lib.so,permissions:755);
 instructions.install.import= \
    org.eclipse.equinox.p2.touchpoint.natives.ln,\
    org.eclipse.equinox.p2.touchpoint.natives.chmod

【讨论】:

【解决方案3】:

有两篇文章解释了如何实现这一点:

第一个包含更多选项,第二个仅涉及 P2 接触点。

警告:当我们向我们的插件添加自定义接触点时,它在安装时开始死锁(经常,但并非总是如此)(我们不希望有风险并删除它们)。也许我们做错了什么,但这是需要注意的。

Built-in touchpoints 似乎工作正常。

【讨论】:

    猜你喜欢
    • 2016-04-14
    • 2017-11-05
    • 2022-01-14
    • 2017-08-27
    • 2019-01-23
    • 1970-01-01
    • 2017-09-03
    • 1970-01-01
    • 2023-03-10
    相关资源
    最近更新 更多