2010-06-27 22 views
6

Jak zbudować aplikację SWT przy użyciu repozytorium Eclipse P2 i Maven Tycho-P2-plugin?Wykorzystanie Maven Tycho-P2-plugin z SWT

+0

Chciałbym zobaczyć, jak dobrze - powodzenia z odpowiedzią :) – javamonkey79

+0

choć nie mogę znaleźć szczegółów problemu. Potrzebujesz więcej informacji. – Kane

+0

@Kane: Co powoduje komunikat o błędzie "Nie można określić pakietu fragmentu implementacji SWT"? Które informacje brakuje w POM? –

Odpowiedz

4

Możesz zdefiniować środowiska docelowe dla wtyczki "docelowa platforma-konfiguracja". Niezależnie od tego, czy tworzysz RCP, czy funkcje dla wielu środowisk, możesz pozwolić swojej funkcji na dołączenie fragmentów swt dla tych hostów.

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

urywek w 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

Buduję wtyczkę (' eclipse-plugin') Mam wpis 'environments' i mam niezbędne wtyczki w moim lokalnym repozytorium p2, ale Tycho nie może zdecydować, który z nich wybrać. –

2

Tycho pozwala budować & kompilacji rzeczy oparte na Eclipse, w tym wtyczek, funkcji i aplikacji RCP. Na oficjalnej stronie projektu znajduje się mnóstwo dobrych samouczków, ale w moim przypadku użyłem przykładowego projektu (http://git.eclipse.org/c/tycho/org.eclipse.tycho-demo.git/tree/itp04-rcp).

Jednakże, jeśli nie trzeba zbudować kilka wtyczek albo RCP aplikacji, myślę, że nie trzeba Tycho: po prostu może importować SWT jako normalny zależnością maven i budować swoją aplikację w ten sposób ...

+0

Ten przykład wygląda dobrze, ale to nie wyjaśnia, jak to działa. Mój problem polega na tym, że dostaję komunikat o błędzie ("Nie mogłem określić pakietu fragmentów implementacji SWT") i nie mam pojęcia, jak się go pozbyć.Prawdopodobnie brakuje mi niektórych szczegółów, ponieważ wszystkie oczywiste ustawienia w moim projekcie są takie same jak w wersji demonstracyjnej. –

+0

+1, przykład RCP tycho demonstruje, jak zbudować aplikację dla wielu środowisk, takich jak Windows i Linux. – Kane

+0

@Kane: Nie buduję produktu RCP, ale pakiet, który zależy od SWT. –

2

znalazłem problem. Tło: Buduję wtyczkę edytora, którą Xtext generuje dla DSL.

Wtyczka zależy org.eclipse.swt;version=3.7.0. Numer packaging to eclipse-plugin. Jestem listing all the necessary environments in my parent POM.

Repozytorium p2 jest lokalnym lustro na moim twardym dysku, który wypełnić eksportując definicję docelowego (plik * .target).

Problemem jest to, że eksportowanie definicję celu stworzy coś, co wygląda trochę jak repo p2 ale istnieją subtelne różnice.

Na przykład musisz zdefiniować środowisko docelowe (Linux/Windows/Mac, x86/x86_64, win32/cocoa/gtk) w pliku definicji celu. Jeśli nic nie podasz, Eclipse użyje bieżącej platformy. Jeśli użyjesz "*", wszystkie fragmenty SWT zostaną pominięte.

To znaczy: Wywóz zawiera wszystkie fragmenty SWT (30 wtyczek w folderze plugins/), są one wymienione w contents.jarale artifact.jar wymienia tylko pojedynczy fragment SWT, która odpowiada aktualnej platformy (czyli pakiet Plus żródła).

To nie wystarczy dla Tycho.

Rozwiązanie: Tworzenie właściwej repo p2 korzystając ten mały skrypt:

# 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 

Uruchom ten wewnątrz pracy instalacji Eclipse.