我有一个Eclipse RCP产品。
我使用位于.product文件所在目录中的p2.inf文件删除.exe文件并将eclipsec.exe文件重命名为.exe文件。内容如下:
instructions.configure = \
org.eclipse.equinox.p2.touchpoint.natives.copy(source:${installFolder}/eclipsec.exe, target:${installFolder}/myproductname.exe, overwrite:true);\
org.eclipse.equinox.p2.touchpoint.natives.remove(path:${installFolder}/eclipsec.exe);我需要用maven tycho为windows和linux构建这个产品。对于windows,p2.inf文件说明工作正常。对于linux,这是失败的,我对此并不感到惊讶(没有.exe文件)。
当产品是用tycho构建的(对于linux来说,只生成一个可执行文件)时,是否有一种方法只对windows /忽略用于linux构建的p2.inf文件执行这些指令?
提前谢谢。
Tycho版本: 1.0.0 Eclipse版本: 4.7.0
发布于 2017-11-30 15:40:38
如何在不破坏linux构建的情况下将eclipsec.exe移动到myproduct.exe (覆盖)
我在我的myproduct.product文件旁边添加了一个myproduct.p2.inf文件,其内容如下:
instructions.configure = \
org.eclipse.equinox.p2.touchpoint.natives.copy(source:${installFolder}/eclipsec.exe, target:${installFolder}/myproduct.exe, overwrite:true);\
org.eclipse.equinox.p2.touchpoint.natives.remove(path:${installFolder}/eclipsec.exe);\
org.eclipse.equinox.p2.touchpoint.natives.remove(path:${installFolder}/../../../../linux/gtk/x86_64/myproduct/myproduct.exe);在这种状态下,Linux的复制指令将失败,因为没有eclipsec.exe文件(FileNotFoundException)。它只为Windows生成。
注意,如果找不到指定的文件,则复制指令会失败,而如果指定的文件不存在,则不会执行remove指令。
解决办法
为了解决这个问题,我向我的特性添加了空文件org.example.Feature/ file To /eclipsec.exe(它包含在基于特性的产品中),并将行root.linux.gtk.x86_64=filesToCopy添加到特性项目的build.properties中。这会将空eclipsec.exe文件复制到Linux构建中。
Windows发生的事情:
-> myproduct.exe是唯一的可执行文件( myproduct.ini文件旁边)。不过,所有的牌子都丢了!
Linux发生了什么:
-> linux存档看起来与tycho构建的一模一样。所有*.exe文件的复制和重命名都没有其他目的,只能在p2.inf文件中执行复制指令,这是Windows所必需的。
发布于 2017-11-29 14:34:28
可以这样做:
(osgi.os=linux)文件并具有平台筛选器的片段:、p2.inf或units.0.filter=(osgi.os=linux)。(还请参见在Eclipse帮助和月食维基中自定义元数据)如果可能的话,第一个选项更好,因为第二个选项更复杂,需要更多关于p2的知识。
注意,您的根本问题似乎是日食虫185205。也许你想投它的票或者评论它。我怀疑有一个更好的解决办法比通过p2做一个拷贝。
发布于 2019-07-24 15:43:25
我必须自己解决它,张贴完整的解决方案在这里使用窗口过滤器。
在应用程序(或功能项目)的“产品”项目中创建p2.inf文件。
将MYPRODUCT更改为您自己的品牌名称。
在复制时,确保在接触点操作中的反斜杠后没有尾随空格,否则它将无法工作。
#create a requirement on the fragment we are creating
requires.22.namespace=org.eclipse.equinox.p2.iu
requires.22.name=MYPRODUCT.eclipsecoverride.config.win32.win32.x86_64
requires.22.range=[$version$,$version$]
requires.22.greedy=true
requires.22.filter=(osgi.os=win32)
#create a IU fragment with touchpoint action
units.0.id = MYPRODUCT.eclipsecoverride.config.win32.win32.x86_64
units.0.version = $version$
units.0.provides.1.namespace=org.eclipse.equinox.p2.iu
units.0.provides.1.name=MYPRODUCT.eclipsecoverride.config.win32.win32.x86_64
units.0.provides.1.version=$version$
units.0.filter=(osgi.os=win32)
units.0.instructions.configure = \
org.eclipse.equinox.p2.touchpoint.natives.copy(\
source:${installFolder}/eclipsec.exe,\
target:${installFolder}/MYPRODUCT_console.exe,overwrite:true);\
org.eclipse.equinox.p2.touchpoint.natives.remove(\
path:${installFolder}/eclipsec.exe);https://stackoverflow.com/questions/47549724
复制相似问题