Я нашел проблему. Справочная информация: я создаю плагин редактора, который Xtext создает для DSL.
Плагин зависит от org.eclipse.swt;version=3.7.0
. packaging
- это eclipse-plugin
. Я перечисляю все необходимые среды в родительском POM .
Репозиторий p2 - это локальное зеркало на моем жестком диске, которое я заполняю, экспортируя определение цели (* .target file).
Проблема в том, что экспорт определения цели создаст нечто, похожее на репозиторий p2, но с небольшими отличиями.
Например, вы должны определить целевую среду (Linux / Windows / Mac, x86 / x86_64, win32 / cocoa / gtk) в файле Target Definition. Если вы ничего не укажете, Eclipse будет использовать текущую платформу. Если вы используете «*», все фрагменты SWT будут опущены.
Это означает: экспорт содержит все фрагменты SWT (30 плагинов в папке plugins/
), они упоминаются в contents.jar
, но artifact.jar
содержит только один фрагмент SWT, соответствующий вашему текущему платформа (то есть пакет плюс источники).
Этого недостаточно для Тихо.
Решение: создать правильный репозиторий 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.