【问题标题】:Mac distribution of Eclipse RCP application built with Tycho on Windows doesn't start在 Windows 上使用 Tycho 构建的 Eclipse RCP 应用程序的 Mac 分发无法启动
【发布时间】:2013-02-10 14:42:32
【问题描述】:

我已经用 Tycho 构建了一个 Eclipse RCP 应用程序 (Indigo)。该构建在 Win 7 64 位机器上运行。

父 POM 包括:

<plugin>
  <groupId>org.eclipse.tycho</groupId>
  <artifactId>target-platform-configuration</artifactId>
  <version>${tycho-version}</version>
  <configuration>
  <resolver>p2</resolver>

  <environment>
    <os>linux</os>
    <ws>gtk</ws>
    <arch>x86_64</arch>
  </environment>
  <environment>
    <os>win32</os>
    <ws>win32</ws>
    <arch>x86_64</arch>
  </environment>
  <environment>
    <os>macosx</os>
    <ws>cocoa</ws>
    <arch>x86_64</arch>
  </environment>

...

产品配置如下所示(为了便于阅读,有一些遗漏和额外的换行符):

<product name="My App" uid="myapp.product" id="myapp.core.product" application="myapp.core.application" version="0.1.4.qualifier" useFeatures="true" includeLaunchers="true">

   <configIni use="default">
   </configIni>

   <launcherArgs>
      <programArgs>-data @noDefault</programArgs>
      <vmArgsMac>-XstartOnFirstThread
                         -Dorg.eclipse.swt.internal.carbon.smallFonts</vmArgsMac>
   </launcherArgs>

   <launcher name="myapp_0_1_4">
      <solaris/>
      <win useIco="false">
         <bmp/>
      </win>
   </launcher>

   <vm>
      <macos include="false">org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6</macos>
   </vm>

   <plugins>
      <plugin id="com.ibm.icu"/>
      <plugin id="myapp.core"/>
      <plugin id="org.eclipse.core.runtime"/>
      <plugin id="org.eclipse.core.runtime.compatibility.registry" fragment="true"/>
      <plugin id="org.eclipse.equinox.app"/>
      <plugin id="org.eclipse.equinox.common"/>
      <plugin id="org.eclipse.osgi"/>
      <plugin id="org.eclipse.swt"/>
      <plugin id="org.eclipse.swt.win32.win32.x86_64" fragment="true"/>
      <plugin id="org.eclipse.ui"/>
      <plugin id="org.eclipse.ui.workbench"/>
   </plugins>

   <features>
      <feature id="org.eclipse.rcp" version="3.7.2.v20120120-1424-9DB5FmnFq5JCf1UA38R-kz0S0272"/>
      <feature id="myapp.platform_dependencies.feature" version="0.1.4.qualifier"/>
      <feature id="myapp.core.feature" version="0.1.4.qualifier"/>
      <feature id="myapp.ui.feature" version="0.1.4.qualifier"/>
      <feature id="myapp.model.feature" version="0.1.4.qualifier"/>
   </features>

   <configurations>
      <plugin id="org.eclipse.core.runtime" autoStart="true" startLevel="0" />
      <plugin id="org.eclipse.equinox.common" autoStart="true" startLevel="2" />
   </configurations>

</product>

构建运行没有问题,并生成 zip 文件,这些文件在目标操作系统 Windows 和 Linux 上解压缩,包括工作启动器。 (在 Linux 上,我必须先使启动器可执行,然后才能运行它。)

然而,在 Mac OS X (10.6.8) 上,启动器 (myapp.app) 什么都不做...

当我运行java -jar -XstartOnFirstThread plugins/org.eclipse.equinox.launcher_[version] 时,应用程序会启动,尽管没有启动屏幕。

我想我的产品配置中的任何地方都有错误的设置,但我不介意哪个。

【问题讨论】:

  • 我应该补充一点,我在构建中使用的是 Indigo p2 存储库而不是本地目标平台。
  • 给像我这样的 .app 新手的注释:myapp.app 实际上是一个文件夹,并且为这个文件夹设置可执行位 - 除非递归完成 - 不会改变任何东西。实际的启动器文件位于 myapp.app/Contents/MacOS/myapp 的此文件夹中,设置此文件的可执行位 (chmod +x myapp) 即可使应用程序可执行( a) 通过从命令行运行此文件(在 myapp.app/Contents/MacOS/ 中使用./myapp),(b) 通过双击 myapp.app/Contents /MacOS/myapp,或 (c) 通过双击 myapp.app 本身(在 Finder 中)

标签: macos eclipse-rcp tycho p2


【解决方案1】:

Windows for Mac 上的跨平台构建预计无法正常工作。原因是 Tycho/p2 需要模拟具有 Unix 权限的文件系统。 Tycho 的问题跟踪器中有一个 request for this,但恕我直言,不值得为此付出努力。

【讨论】:

  • 我已经通读了错误报告,此时我不会参与讨论 Windows 的可执行位功能的实现是否有用(我与操作系统无关无论如何),但是您能否确认将构建移至例如 Linux 将解决此问题?
  • 是的,如果构建机器是 *nix 系统,则可以使用 Tycho 进行跨平台构建。
【解决方案2】:

我刚刚弄清楚如何从 Windows 制作 OSX 可执行 .app。

您可以设置 Tycho 构建为 Mac/Linux 生成 .tar.gz 文件,然后使用工具在 tar 文件中设置可执行文件的权限,因为 tar 支持 *nix 权限。

这里是一个 sn-p,它显示了如何在 pom.xml 文件中设置它。 (此 sn-p 还设置 Mac .app 文件夹并将版本添加到存档文件名): http://snipt.org/Aggid3

这是一个执行权限位的 Java 类。它需要 Guava 和 Apache Commons Compress: http://snipt.org/Aggic1

这是一个包含所有依赖项的预构建 jar: https://mega.co.nz/#!WcNjyRjS!KE7tM1xYrt1l9JIguUAsrgpLe2V0NS1QIj_NvdAnm88

使用上述的用法示例是: java -jar gztperms.jar “我的产品-0.0.1.201309091838-macosx.cocoa.x86.tar.gz” “我的产品-可执行文件-0.0.1.201309091838-macosx.cocoa.x86.tar.gz” “我的产品.app/内容/MacOS/我的产品”

我从 Jenkins 执行了一个相当简单的基于 Ant 的构建后脚本,它找到 .gz 文件并在其上运行此脚本,现在一切都可以通过工件链接进行。

【讨论】:

  • 这太糟糕了。下次我会尝试使用持续时间超过四年的链接。
猜你喜欢
  • 2018-02-22
  • 1970-01-01
  • 2010-09-09
  • 2016-05-30
  • 2015-10-04
  • 1970-01-01
  • 2017-11-16
  • 1970-01-01
相关资源
最近更新 更多