Распространение Mac приложения Eclipse RCP, созданного с помощью Tycho в Windows, не запускается

Я создал приложение Eclipse RCP (Indigo) с помощью Tycho. Сборка выполняется на 64-битной машине с Win 7.

Родительский 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], приложение запускается, хотя и без заставки.

Я предполагаю, что у меня есть неправильная настройка где-либо в моей конфигурации продукта, но я не могу понять, какая именно.


person s.d    schedule 25.02.2013    source источник
comment
Я должен добавить, что я использую репозиторий Indigo p2, а не локальную целевую платформу в сборке.   -  person s.d    schedule 25.02.2013
comment
Примечание для новичков в .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)   -  person s.d    schedule 25.02.2013


Ответы (2)


Ожидается, что кроссплатформенная сборка на Windows для Mac не будет работать. Причина в том, что Tycho/p2 должен был бы имитировать файловую систему с разрешениями Unix. В системе отслеживания проблем Tycho есть запрос, но ИМХО реализация этого не стоит усилий.

person oberlies    schedule 25.02.2013
comment
Я прочитал отчет об ошибке и на данный момент не буду участвовать в обсуждении того, полезна ли реализация функции исполняемого бита для Windows или нет (в любом случае я довольно независим от ОС), но можете ли вы подтвердить, что перенос сборки, например, на Linux исправит это? - person s.d; 25.02.2013
comment
Да, кроссплатформенные сборки с Tycho работают, если сборочная машина представляет собой систему *nix. - person oberlies; 26.02.2013

Я только что понял, как сделать исполняемый файл OSX .app из Windows.

Вы можете настроить сборку Tycho для создания файлов .tar.gz для Mac/Linux, а затем использовать инструмент для установки разрешения на исполняемый файл в файле tar, поскольку tar поддерживает разрешения *nix.

Вот фрагмент, который показывает, как установить это в файле pom.xml. (Этот фрагмент также настраивает папку 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/Contents/MacOS/Мой продукт»

У меня есть довольно тривиальный сценарий пост-сборки на основе Ant, который я запускаю из Jenkins, который находит файл .gz и запускает на нем этот сценарий, и теперь все работает по ссылке артефакта.

person n8n8baby    schedule 09.09.2013
comment
Это отстой. В следующий раз я постараюсь использовать ссылки, которые прослужат дольше четырех лет. - person n8n8baby; 24.04.2018