Eclipse p2的替代方案用于自定义安装处理程序

3
在p2之前,人们可以编写一个自定义安装处理程序,并使用执行的功能在安装期间执行任何“自定义”任务。
我发现p2不再支持自定义安装处理程序。 我一直听说“自定义touchpoints”是替代它的。 但我找不到任何具体的示例/文档。
有人能告诉我如何使用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参数。 - JesperE
你如何检查计算机运行的是64位还是32位? - pdeva
嗯,也许那是不可能的。 - JesperE
3个回答

4

p2.inf 是执行自定义操作的正确位置。将vm参数添加到.ini中的好地方。您可以在您的feature/plug-in下放置一个p2.inf

更新于12月20日:

我在自己的环境中尝试过,在安装相同feature时设置不同的vm args在linux 32位和64位上都能正常工作。您可以下载示例代码进行测试。

#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。 - pdeva
有没有办法调试这个问题? - pdeva
你是如何部署你的功能的?使用PDE导出还是PDE构建?你可以远程调试这两种方式,将断点添加到org.eclipse.equinox.p2.publisher.eclipse.AdviceFileAdvice类中。 - Kane
关于部署,目前我只是在Eclipse中创建本地更新站点,并使用Eclipse安装程序GUI进行安装,该GUI使用P2 Director。 - pdeva
@pdeva,我自己尝试了一下,并制作了一个小例子来演示它。 - Kane
显示剩余2条评论

0

我认为关于这个问题最完整的文档是Eclipse wiki。你可能对“本地触点操作”感兴趣,但也可以实现自己的触点操作,即作为安装过程的一部分调用的Java类。

编辑:自定义元数据包含有关在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

我认为我需要自定义触点操作,即调用我的自己的Java类。然而,我在维基页面上没有看到任何相关信息。 - pdeva
这是自定义Touchpoint教程的链接:https://eclipsesource.com/blogs/2013/05/23/custom-touchpoints-in-p2/。 - ilke Muhtaroglu

0

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