EclipseP2リポジトリとMaventycho-p2-pluginを使用してSWTアプリケーションを構築するにはどうすればよいですか?
3 に答える
'target-platform-configuration'プラグインのターゲット環境を定義できます。複数の環境用に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>
feature.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"/>
Tychoを使用すると、プラグイン、機能、RCPアプリケーションなど、Eclipseベースのものをビルドおよびコンパイルできます。公式プロジェクトページにはたくさんの良いチュートリアルがありますが、私の場合はサンプルプロジェクト(http://git.eclipse.org/c/tycho/org.eclipse.tycho-demo.git/tree/itp04 )を使用しました-rcp)。
ただし、プラグインやRCPアプリケーションをビルドする必要がない場合は、tychoは必要ないと思います。SWTを通常のMaven依存関係としてインポートし、その方法でアプリをビルドできます...
問題を見つけました。背景:XtextがDSL用に生成するエディタープラグインを構築しています。
プラグインはに依存しorg.eclipse.swt;version=3.7.0
ます。packaging
ですeclipse-plugin
。_ 親POMに必要なすべての環境をリストしています。
p2リポジトリは、ターゲット定義(* .targetファイル)をエクスポートすることで埋めるハードディスク上のローカルミラーです。
問題は、ターゲット定義をエクスポートすると、p2リポジトリによく似たものが作成されますが、微妙な違いがあることです。
たとえば、ターゲット定義ファイルでターゲット環境(Linux / Windows / Mac、x86 / x86_64、win32 / cocoa / gtk)を定義する必要があります。何も指定しない場合、Eclipseは現在のプラットフォームを使用します。「*」を使用すると、すべてのSWTフラグメントが省略されます。
plugins/
つまり、エクスポートにはすべてのSWTフラグメント(フォルダー内に30個のプラグイン)が含まれます。これらはに記載されてcontents.jar
いますがartifact.jar
、現在のプラットフォーム(つまり、バンドルとソース)に一致する単一のSWTフラグメントのみがリストされます。
これはTychoにとって十分ではありません。
解決策:次の小さなスクリプトを使用して、適切な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インストール内でこれを実行します。