2010-06-27 12 views
6

Wie erstelle ich eine SWT-Anwendung mit dem Eclipse P2-Repository und dem maven tycho-p2-plugin?Verwendung von Maven tycho-p2-plugin mit SWT

+0

Ich möchte das auch sehen - viel Glück mit einer Antwort aber :) – javamonkey79

+0

Ich kann das Detail Ihres Problems nicht finden. Benötigen Sie weitere Informationen. – Kane

+0

@Kane: Was verursacht die Fehlermeldung "Konnte SWT-Implementierungsfragmentpaket nicht ermitteln"? Welche Informationen fehlen in meinem POM? –

Antwort

4

Sie können die Zielumgebungen für das Plugin 'target-platform-configuration' definieren. Unabhängig davon, ob Sie RCP oder Funktionen für mehrere Umgebungen erstellen, können Sie Ihre Funktion so einrichten, dass sie die Swt-Fragmente für diese Hosts enthält.

 <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

Ich baue ein Plugin (' eclipse-plugin') Ich habe den 'environments' Eintrag und ich habe die notwendigen Plugins in meinem lokalen p2 Repo, aber Tycho kann sich nicht entscheiden welches zu wählen ist. –

2

Mit Tycho können Sie & kompilieren Eclipse-basierte Sachen, einschließlich Plugins, Funktionen und RCP-Anwendungen. Auf der offiziellen Projektseite gibt es eine Menge guter Tutorials, aber in meinem Fall habe ich das Beispielprojekt (http://git.eclipse.org/c/tycho/org.eclipse.tycho-demo.git/tree/itp04-rcp) verwendet.

jedoch, wenn Sie nicht einige Plugins oder eine RCP-Anwendung erstellen müssen, denke ich Sie nicht tycho benötigen: Sie können nur SWT als normale Maven Abhängigkeit importieren und Ihre Anwendung auf diese Weise bauen ...

+0

Dieses Beispiel sieht gut aus, aber das erklärt nicht, wie es funktioniert. Mein Problem ist, dass ich eine Fehlermeldung bekomme ('SWT Implementation Fragment Bundle konnte nicht ermittelt werden') und ich habe keine Ahnung, wie ich es loswerden soll.Es ist wahrscheinlich ein Detail, das ich vermisse, da alle offensichtlichen Einstellungen in meinem Projekt die gleichen wie in der Demo sind. –

+0

+1, das RCP-Beispiel von Tycho zeigt, wie eine Anwendung für mehrere Umgebungen wie Windows und Linux erstellt wird. – Kane

+0

@Kane: Ich baue kein RCP-Produkt, sondern ein Bündel, das von SWT abhängt. –

2

fand ich das Problem. Hintergrund: Ich baue das Editor-Plugin, das Xtext für DSLs generiert.

Das Plugin ist abhängig von org.eclipse.swt;version=3.7.0. Die packaging ist . Ich bin listing all the necessary environments in my parent POM.

Das p2-Repository ist ein lokaler Spiegel auf meiner Festplatte, den ich durch den Export einer Zieldefinition (* .target-Datei) fülle.

Das Problem ist, dass das Exportieren einer Zieldefinition etwas erzeugt, das viel wie ein P2 Repo aussieht, aber es gibt feine Unterschiede.

Zum Beispiel müssen Sie eine Zielumgebung (Linux/Windows/Mac, x86/x86_64, win32/cocoa/gtk) in der Zieldefinitionsdatei definieren. Wenn Sie nichts angeben, verwendet Eclipse die aktuelle Plattform. Wenn Sie "*" verwenden, werden alle SWT-Fragmente weggelassen.

Das bedeutet: Der Export all SWT-Fragment enthält (30 Plugins im plugins/ Ordner), werden sie in den contents.jar erwähnt aber die artifact.jar listet nur das einzelne SWT-Fragment, das Ihre aktuelle Plattform übereinstimmt (dh das Bündel Plus die Quellen).

Dies ist nicht genug für Tycho.

Lösung: Erstellen Sie eine richtige p2 Repo dieses kleine Skript:

# 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 dies innerhalb eines Arbeits Eclipse-Installation.