首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用重命名的myproduct.exe替换eclipsec.exe

如何用重命名的myproduct.exe替换eclipsec.exe
EN

Stack Overflow用户
提问于 2017-11-29 09:50:34
回答 3查看 647关注 0票数 1

我有一个Eclipse RCP产品。

我使用位于.product文件所在目录中的p2.inf文件删除.exe文件并将eclipsec.exe文件重命名为.exe文件。内容如下:

代码语言:javascript
复制
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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-11-30 15:40:38

如何在不破坏linux构建的情况下将eclipsec.exe移动到myproduct.exe (覆盖)

我在我的myproduct.product文件旁边添加了一个myproduct.p2.inf文件,其内容如下:

代码语言:javascript
复制
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发生的事情:

  1. 该产品由eclipsec.exe和myproduct.exe组成。
  2. eclipsec.exe被复制到myproduct.exe (它覆盖myproduct.exe)
  3. eclipsec.exe被删除

-> myproduct.exe是唯一的可执行文件( myproduct.ini文件旁边)。不过,所有的牌子都丢了!

Linux发生了什么:

  1. 该产品由myproduct可执行文件和一个空的eclipsec.exe文件构建。
  2. eclipsec.exe被复制到myproduct.exe
  3. eclipsec.exe被删除
  4. myproduct.exe也被删除了

-> linux存档看起来与tycho构建的一模一样。所有*.exe文件的复制和重命名都没有其他目的,只能在p2.inf文件中执行复制指令,这是Windows所必需的。

票数 0
EN

Stack Overflow用户

发布于 2017-11-29 14:34:28

可以这样做:

如果可能的话,第一个选项更好,因为第二个选项更复杂,需要更多关于p2的知识。

注意,您的根本问题似乎是日食虫185205。也许你想投它的票或者评论它。我怀疑有一个更好的解决办法比通过p2做一个拷贝。

票数 1
EN

Stack Overflow用户

发布于 2019-07-24 15:43:25

我必须自己解决它,张贴完整的解决方案在这里使用窗口过滤器。

在应用程序(或功能项目)的“产品”项目中创建p2.inf文件。

将MYPRODUCT更改为您自己的品牌名称。

在复制时,确保在接触点操作中的反斜杠后没有尾随空格,否则它将无法工作。

代码语言:javascript
复制
#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);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47549724

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档