2010-06-27 11 views
6

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

+0

Mi piacerebbe vedere anche questo - buona fortuna con una risposta però :) – javamonkey79

+0

Non riesco a trovare i dettagli del tuo problema. Hai bisogno di più informazioni – Kane

+0

@Kane: Cosa causa il messaggio di errore "Impossibile determinare il pacchetto di frammenti di implementazione SWT"? Quali informazioni mancano nel mio POM? –

risposta

4

È 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"/> 
+0

Sto costruendo un plugin (' eclipse-plugin') Ho la voce 'environments' e ho i plugin necessari nel mio repository p2 locale ma Tycho non può decidere quale scegliere. –

2

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 ...

+0

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. –

+0

+1, l'esempio RCP di tycho mostra come creare un'applicazione per più ambienti, come Windows e Linux. – Kane

+0

@Kane: Non sto creando un prodotto RCP ma un pacchetto che dipende da SWT. –

2

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.jarma 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.