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
Antwort
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"/>
Ich baue ein Plugin ('
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 ...
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. –
+1, das RCP-Beispiel von Tycho zeigt, wie eine Anwendung für mehrere Umgebungen wie Windows und Linux erstellt wird. – Kane
@Kane: Ich baue kein RCP-Produkt, sondern ein Bündel, das von SWT abhängt. –
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.
- 1. Verwendung von zwei JCalender für SWT-Anwendung
- 2. Verwendung von Scalatra 2.2.1 mit Maven
- 3. Verwendung von Bintray Maven-Repository mit Ivy
- 4. Vergleichen SWT mit SWING
- 5. Verwendung des maven-bundle-plugins mit dem maven-shade-plugin
- 6. SWT: Unterbild von Bild
- 7. Java.lang.NoClassDefFoundError nach der ersten Verwendung von Maven?
- 8. SWT-Problem mit syncExec()
- 9. SWT & JFace von der Befehlszeile
- 10. Schnelles Pixelplotten mit SWT?
- 11. JFreeChart mit SWT
- 12. Verwendung von xjcs -enableIntrospection mit jaxws-maven-plugin
- 13. Maven: Verwendung von Java 8 Bibliotheken in Anwendungen mit RetroLabda-Maven-Plugin und DEX-Ed mit Android-Maven-Plugin
- 14. Window ID von Java SWT
- 15. Griff Taste drückt swt mit
- 16. Deaktivieren Sie SWT-Fenster, während SWT-Dialog zeigt
- 17. SWT Composite maximale Größe
- 18. Verwendung von Jython mit M2Eclipse
- 19. SWT als Gradle-Abhängigkeit importieren
- 20. Verwendung von Eclipse Java Compiler (ecj) in Maven-Builds
- 21. mule Unit-Tests unter Verwendung von Maven todsichere
- 22. Schritte in SWT von Flimmern befreien
- 23. swt tutorials oder guides
- 24. SWT: System VirtualKeyBoard
- 25. Erstellen von Dokumentation mit Maven
- 26. Erstellen von Installationsprogrammen mit Maven
- 27. Verwenden von Maven mit Sourceforge.net
- 28. Browsertyp/-version von SWT-Browser finden
- 29. SWT bekommen Systemordner Image?
- 30. Anzeigen des übergeordneten modalen Dialogs mit SWT
Ich möchte das auch sehen - viel Glück mit einer Antwort aber :) – javamonkey79
Ich kann das Detail Ihres Problems nicht finden. Benötigen Sie weitere Informationen. – Kane
@Kane: Was verursacht die Fehlermeldung "Konnte SWT-Implementierungsfragmentpaket nicht ermitteln"? Welche Informationen fehlen in meinem POM? –