Come si crea un'applicazione SWT utilizzando il repository Eclipse P2 e il plugin Maven tycho-p2?Utilizzo di Maven tycho-p2-plugin con SWT
risposta
È possibile definire gli ambienti di destinazione per il plugin 'target-platform-configuration'. Qualunque cosa tu stia creando RCP o funzionalità per più ambienti, puoi consentire alla tua funzionalità di includere i frammenti di swt per questi host.
<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>
Snippet in 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"/>
Sto costruendo un plugin ('
Tycho consente di compilare & elementi compilati basati su Eclipse, inclusi plug-in, funzioni e applicazioni RCP. Nella pagina del progetto ufficiale ci sono un sacco di buoni tutorial, ma nel mio caso ho usato il progetto di esempio (http://git.eclipse.org/c/tycho/org.eclipse.tycho-demo.git/tree/itp04-rcp).
Tuttavia, se non avete bisogno di costruire alcuni plugin o un'applicazione RCP, penso che non hai bisogno di Tycho: appena possibile importare SWT come un normale dipendenza Maven e costruire la vostra applicazione in questo modo ...
Questo esempio sembra buono ma questo non spiega come funziona. Il mio problema è che ottengo un messaggio di errore ('Impossibile determinare il pacchetto di frammenti di implementazione SWT') e non ho idea di come eliminarlo.Probabilmente sono alcuni dettagli che mi mancano poiché tutte le impostazioni ovvie nel mio progetto sono le stesse della demo. –
+1, l'esempio RCP di tycho mostra come creare un'applicazione per più ambienti, come Windows e Linux. – Kane
@Kane: Non sto creando un prodotto RCP ma un pacchetto che dipende da SWT. –
ho trovato il problema. Background: sto costruendo il plugin editor che Xtext genera per i DSL.
Il plug-in dipende da org.eclipse.swt;version=3.7.0
. Il packaging
è eclipse-plugin
. Sono listing all the necessary environments in my parent POM.
Il repository p2 è un mirror locale sul mio disco rigido che compilo esportando una definizione di destinazione (file * .target).
Il problema è che l'esportazione di una definizione di destinazione creerà qualcosa che assomiglia molto a un repository p2 ma ci sono sottili differenze.
Ad esempio, è necessario definire un ambiente di destinazione (Linux/Windows/Mac, x86/x86_64, win32/cocoa/gtk) nel file di definizione della destinazione. Se non si specifica nulla, Eclipse utilizzerà la piattaforma corrente. Se si utilizza "*", tutti i frammenti SWT verranno omessi.
Ciò significa: L'esportazione contiene tutti i frammenti SWT (30 plugins nella cartella plugins/
), sono menzionati nella contents.jar
ma il artifact.jar
elenca solo il frammento SWT singolo, che corrisponde al tuo attuale piattaforma (vale a dire il pacchetto più le fonti).
Questo non è sufficiente per Tycho.
Soluzione: creare un repo p2 corretto utilizzo di questo piccolo script:
# 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
Run questo all'interno di un impianto Eclipse lavoro.
Mi piacerebbe vedere anche questo - buona fortuna con una risposta però :) – javamonkey79
Non riesco a trovare i dettagli del tuo problema. Hai bisogno di più informazioni – Kane
@Kane: Cosa causa il messaggio di errore "Impossibile determinare il pacchetto di frammenti di implementazione SWT"? Quali informazioni mancano nel mio POM? –