2010-12-13 23 views
2

在p2之前,可以编写一个自定义安装处理程序,其中包含一个可在安装期间执行任何“自定义”任务的功能。定制安装处理程序的Eclipse 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位之间进行区分。

+0

您不需要为此使用自定义接触点。我很确定您可以在产品定义中指定JVM参数。 – JesperE 2010-12-13 18:56:49

+0

你如何检查一个人是否正在运行64位或32位? – pdeva 2010-12-13 19:01:33

+0

嗯。也许这是不可能的。 – JesperE 2010-12-13 19:59:40

回答

2

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

更新于12月20日

我想它在我自己的环境中,它的工作原理以及在Linux上安装32位和64位同样功能时,设置不同的虚拟机ARGS。你可以下载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); 
+0

似乎没有工作:( 我甚至去除units.o.filter线 另外,如果我是正确的路线: units.0.hostRequirements.1.name = com.example.yourfeature 功能名称必须替换为我的功能的实际ID – pdeva 2010-12-15 10:28:11

+0

有没有什么方法可以调试这个? – pdeva 2010-12-15 10:29:47

+0

如何部署你的功能?使用PDE导出或PDE构建?你可以远程调试这两种方式,在org.eclipse中添加断点.equinox.p2.publisher.eclipse.AdviceFileAdvice类 – Kane 2010-12-16 02:46:45

0

我认为关于此事最完整的文档是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 
+0

我想我需要自定义接触点动作,即调用我自己的Java类。但是,我没有看到它在维基页面中的任何信息。 – pdeva 2010-12-13 18:55:46

0

有解释如何实现这个两篇文章:

第一个涵盖多一点的选择,二是只有P2接触点。

警告:当我们为我们的插件添加了自定义接触点时,它在安装时开始发生死锁(通常,但并非总是)(我们不想冒险并将其删除)。也许我们做了错误的事情,但这是要注意的事情。

Built-in touchpoints似乎工作正常,但。