Frage

Ich versuche swt zu lernen, und ich verwende Maven für alle meine baut und für meine IDE Eclipse. Wenn aus der Maven-Repository der swt Gläser bekommen, erhalte ich:

Exception in thread "main" java.lang.UnsatisfiedLinkError: no swt-pi-gtk-3034 in java.library.path
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1709)
    at java.lang.Runtime.loadLibrary0(Runtime.java:823)
    at java.lang.System.loadLibrary(System.java:1030)
    at org.eclipse.swt.internal.Library.loadLibrary(Library.java:100)
    at org.eclipse.swt.internal.gtk.OS.<clinit>(OS.java:19)
    at org.eclipse.swt.internal.Converter.wcsToMbcs(Converter.java:63)
    at org.eclipse.swt.internal.Converter.wcsToMbcs(Converter.java:54)
    at org.eclipse.swt.widgets.Display.<clinit>(Display.java:112)
    at wenzlick.test.swt.main.Main.main(Main.java:30)

Hat jemand erfolgreich eine swt App zu bauen und mit Maven laufen?

Bearbeiten : Ich habe eine wenig Forschung und das Problem gefunden. Blick auf meinem Beitrag unten

War es hilfreich?

Lösung

Klingt wie Maven ist in einer alten Version von SWT ziehen. Ab v3.4 (und höher), ist die swt.jar alle Sie brauchen. SWT wird die .sos, .jnilibs oder .dlls nach Bedarf automatisch extrahieren. Die einzige schwierige Sache, die Sie sich Sorgen machen müssen, um sicherzustellen, dass Sie die richtige swt.jar erhalten (für die jeweilige Plattform Bedeutung).

Versuchen Sie SWT 3.4 in Ihrem lokalen Repository von Hand installieren. Wenn das immer noch Sie das gleiche Problem gibt, dann ist wahrscheinlich etwas faul. Danach würde ich versuche, die .sos manuell und dann unter Angabe der java.library.path variable Extrahieren des -D einschalten Aufruf verwenden. Manchmal auf Linux das Laden der Bibliotheken können aufgrund Abhängigkeitsprobleme versagen (in Dinge wie libpango). In solchen Fällen wird oft der Fehler nur die generischen UnsatisifedLinkError sein, so dass das Problem schwierig zu debuggen.

Andere Tipps

ich die win32 / 64 & osx Artefakte der neuesten SWT-Version (4.2.2) auf einen Google Repository hochgeladen haben, können Sie es hier finden:

https://swt-repo.googlecode.com/svn/repo/

Um es zu verwenden einfach den folgenden in Ihrem pom.xml:

<repositories>
    <repository>
        <id>swt-repo</id>
        <url>https://swt-repo.googlecode.com/svn/repo/</url>
    </repository>
</repositories>

Dann können Sie einfach die SWT Abhängigkeit Ihrer Plattform relevant verweisen. Zum Beispiel:

    <dependency>
        <groupId>org.eclipse.swt</groupId>
        <artifactId>org.eclipse.swt.win32.win32.x86</artifactId>
        <version>4.2.2</version>
    </dependency>

Für andere Plattformen nur ersetzen artifactId mit dem entsprechenden Wert:

  • org.eclipse.swt.win32.win32.x86
  • org.eclipse.swt.win32.win32.x86_64
  • org.eclipse.swt.cocoa.macosx
  • org.eclipse.swt.cocoa.macosx.x86_64

Artefakte für weitere Plattformen und ältere Versionen auch verfügbar sind, finden über die Repository-Verbindung, sie zu finden.

Happy Codierung!

Von der API von UnsatisfiedLinkError

  

ausgelöst, wenn die Java Virtual Machine kann keine geeignete muttersprachliche Definition einer Methode deklariert nativen finden.

Ich habe es selbst nicht ausprobiert, aber ich glaube, Sie nicht nur die Haupt SWT jar herunterladen müssen, sondern eine ‚native‘ JAR für Ihre Plattform zu unterstützen. Zum Beispiel swt-linux-gtk, wenn Sie auf Linux sind?

Ich habe Github mit den neuesten Eclipse Sachen: https://github.com/maven-eclipse/maven-eclipse.github. io . Ich schlage vor, dass lesen.

Die pom.xml die für mich gearbeitet:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.whatever</groupId>
  <artifactId>whatever</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>swt</name>
  <url>http://maven.apache.org</url>

    <repositories>
        <repository>
            <id>maven-eclipse-repo</id>
            <url>http://maven-eclipse.github.io/maven</url>
        </repository>
    </repositories>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
    <swt.version>4.6</swt.version>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>
        <!-- select prefered one, or move the preferred on to the top: -->
        <dependency>
            <groupId>org.eclipse.swt</groupId>
            <artifactId>org.eclipse.swt.win32.win32.x86_64</artifactId>
            <version>${swt.version}</version>
        </dependency>
        <dependency>
            <groupId>org.eclipse.swt</groupId>
            <artifactId>org.eclipse.swt.win32.win32.x86</artifactId>
            <version>${swt.version}</version>
            <!-- To use the debug jar, add this -->
            <classifier>debug</classifier>
        </dependency>       
        <dependency>
            <groupId>org.eclipse.swt</groupId>
            <artifactId>org.eclipse.swt.gtk.linux.x86</artifactId>
            <version>${swt.version}</version>
        </dependency>
        <dependency>
            <groupId>org.eclipse.swt</groupId>
            <artifactId>org.eclipse.swt.gtk.linux.x86_64</artifactId>
            <version>${swt.version}</version>
        </dependency>
        <dependency>
            <groupId>org.eclipse.swt</groupId>
            <artifactId>org.eclipse.swt.cocoa.macosx.x86_64</artifactId>
            <version>${swt.version}</version>
        </dependency>

  </dependencies>
</project>

habe ich eine wenig mehr Forschung auf diesem und fand heraus, dass das swt Glas in ein paar verschiedenen Orten in der Maven-Repository ist. Ich war mit Gläsern durch die swt Gruppe löschte, aber nach ein wenig herum suchen, fand ich die Gläser durch die org.eclipse.swt.gtk.linux Gruppe Linux (org.eclipse.swt.win32.win32 für Windows löschte ). Dies ist für die 3.3-Version von SWT. Noch auf der Suche für 3.4.

Seit 2013 (Dieser Beitrag Anfang Jahr), hat sich die Dinge geändert. SWT ist nun auf Maven Zentrale veröffentlicht. Hier sind die Koordinaten als dies geschrieben:

<dependency>
    <groupId>org.eclipse.platform</groupId>
    <artifactId>org.eclipse.swt.win32.win32.x86_64</artifactId>
    <version>${swt.version}</version>
</dependency>

Sie können diese Ticket rel="nofollow interessant.

Aktuelles SWT Artefakte für Windows 64-Bit: https://mvnrepository.com/artifact/org.eclipse.platform/org.eclipse.swt.win32.win32.x86_64

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top