Файл продукта Eclipse RCP — как работать с несколькими платформами с зависимостями от конкретных платформ

У меня есть приложение Eclipse RCP, файл .product которого содержит ссылки на собственные плагины SWT.

   <plugins>
      <plugin id="org.eclipse.equinox.launcher.win32.win32.x86_64" fragment="true"/>
      <plugin id="org.eclipse.swt.win32.win32.x86_64" fragment="true"/>
   </plugins>

Однако на других платформах (например, Mac) эти плагины не могут быть разрешены. Если вы используете версию этого плагина для Mac (например, org.eclipse.swt.cocoa.macosx.x86_64), все работает нормально.

Есть ли способ указать разные плагины для разных сред или более общий плагин?

Я понимаю, что когда дело доходит до развертывания многоплатформенных продуктов RCP, все усложняется, но в данный момент я просто пытаюсь сделать так, чтобы разработчики на нескольких платформах могли как можно проще начать работу с приложением, а не конечные пользователи.


person Jakg    schedule 09.04.2020    source источник


Ответы (2)


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

Файл feature.xml, определяющий функцию, может указывать ОС/графический интерфейс/архитектуру.

Это то, что стандартный Eclipse org.eclipse.e4.rcp feature.xml имеет для подключаемого модуля/фрагментов SWT:

<plugin
      id="org.eclipse.equinox.launcher.cocoa.macosx.x86_64"
      os="macosx"
      ws="cocoa"
      arch="x86_64"
      download-size="40"
      install-size="88"
      version="1.1.1100.v20190907-0426"
      fragment="true"/>

<plugin
      id="org.eclipse.equinox.launcher.gtk.linux.ppc64le"
      os="linux"
      ws="gtk"
      arch="ppc64le"
      download-size="76"
      install-size="253"
      version="1.1.1100.v20190907-0426"
      fragment="true"/>

<plugin
      id="org.eclipse.equinox.launcher.gtk.linux.x86_64"
      os="linux"
      ws="gtk"
      arch="x86_64"
      download-size="69"
      install-size="166"
      version="1.1.1100.v20190907-0426"
      fragment="true"/>

<plugin
      id="org.eclipse.equinox.launcher.win32.win32.x86_64"
      os="win32"
      ws="win32"
      arch="x86_64"
      download-size="80"
      install-size="161"
      version="1.1.1100.v20190907-0426"
      fragment="true"/>

<plugin
      id="org.eclipse.swt"
      download-size="16"
      install-size="32"
      version="3.114.0.v20200304-0601"
      unpack="false"/>
person greg-449    schedule 09.04.2020

Основываясь на решении, предоставленном greg-449, я заметил, что у вас может быть несколько противоречащих друг другу плагинов без проблем, то есть как для Windows, так и для Mac. может быть указан, и во время выполнения Eclipse будет использовать все, что сможет найти.

Это означает, что при указании обоих плагинов, несмотря на то, что один из них всегда отображается как ошибка (поскольку он неразрешим на этой платформе), он работает нормально.

person Jakg    schedule 09.04.2020
comment
Вы можете пометить эти плагины как необязательные, тогда вы не получите ошибку. - person Robert; 22.04.2020
comment
@ Роберт, у тебя есть пример синтаксиса? Я ничего не вижу в Интернете по этому поводу? - person Jakg; 22.04.2020
comment
Не уверен, что эффект такой же, но у меня есть собственный плагин Eclipse, который импортирует специфичные для платформы части Eclipse через имя их пакета в MANIFEST.MF. Для пакетов вы можете сделать разрешение необязательным. Это происходит автоматически, если вы добавите обязательный подключаемый модуль на вкладке Зависимости для проекта подключаемого модуля Eclipse. - person Robert; 23.04.2020