Использование Maven Tycho-P2-Plugin с SWT
Вопрос
Как создать приложение SWT, используя репозиторий Eclipse P2 и плагин Maven Tycho-P2?
Решение
Вы можете определить целевую среду для плагина «Целевая платформа-конфигурация». Что бы вы ни находили RCP или функции для нескольких сред, вы можете позволить вашей функции включить фрагменты SWT для этих хостов.
<plugin>
<groupId>org.eclipse.tycho</groupId>
<artifactId>target-platform-configuration</artifactId>
<version>${tycho-version}</version>
<configuration>
<resolver>p2</resolver>
<environments>
<environment>
<os>linux</os>
<ws>gtk</ws>
<arch>x86</arch>
</environment>
<environment>
<os>win32</os>
<ws>win32</ws>
<arch>x86</arch>
</environment>
<environment>
<os>solaris</os>
<ws>gtk</ws>
<arch>sparc</arch>
</environment>
</environments>
</configuration>
</plugin>
Фрагмент в функции .xml.
<plugin
id="org.eclipse.swt"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.eclipse.swt.gtk.linux.x86"
os="linux"
ws="gtk"
arch="x86"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"
unpack="false"/>
<plugin
id="org.eclipse.swt.win32.win32.x86"
os="win32"
ws="win32"
arch="x86"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"
unpack="false"/>
Другие советы
Я нашел проблему. Фон: Я создаю плагин редактора, который XText генерирует для DSLS.
Плагин зависит от org.eclipse.swt;version=3.7.0
. Отказ То packaging
является eclipse-plugin
. Отказ я Перечислить все необходимые условия в моем родительском POM.
Репозиторий P2 - это локальное зеркало на моем жестком диске, которое я наполняю, экспортируя целевое определение (* .target file).
Проблема заключается в том, что экспорт целевого определения создаст что-то, что очень похоже на РЕПО P2, но есть тонкие различия.
Например, вы должны определить целевую среду (Linux / Windows / Mac, X86 / X86_64, Win32 / Cocoa / GTK) в файле целевого определения. Если вы ничего не укажете, Eclipse будет использовать текущую платформу. Если вы используете «*», все фрагменты SWT будут опущены.
Это означает: экспорт содержит все фрагменты SWT (30 плагинов в plugins/
папка), они упоминаются в contents.jar
но artifact.jar
только перечисляет один фрагмент SWT, который соответствует вашей текущей платформе (т.е. комплект плюс источники).
Это недостаточно для Tycho.
Решение: создать правильное REPO P2, используя этот небольшой сценарий:
# Where you exported the Target Definition
dir="$HOME/3.7.1-from-target-platform"
# Where the result should be written. Must be != dir
dest="$HOME/3.7.1-from-target-platform-fixed"
# Make sure subsequent invocations don't try to merge old stuff
rm -rf "$dest"
# Prepend "file:" to create a URL from the path
dest="file:$dest"
echo "Merging $dir..."
./eclipse -nosplash \
-application org.eclipse.equinox.p2.publisher.FeaturesAndBundlesPublisher \
-metadataRepository "$dest" \
-artifactRepository "$dest" \
-repositoryName "3.7.1 Indigo Repository" \
-source "$dir" \
-compress -append -publishArtifacts
Запустите это внутри рабочего монтажа Eclipse.
Tycho позволяет вам построить и компилировать материал на основе Eclipse, включая плагины, функции и приложения RCP. На официальной странице проекта есть тонны хорошего урока, но в моем случае я использовал образец проекта ( http://git.eclipse.org/c/tycho/org.eclipse.tycho-demo.git/tree/itp04-rcp. ).
Однако, если вам не нужно строить несколько плагинов или приложения RCP, я думаю, вам не нужен Tycho: вы просто можете импортировать SWT в качестве обычной зависимости Maven и построить ваше приложение ...