Question

J'essaie d'apprendre le swt, et j'utilise maven pour toutes mes versions et eclipse pour mon IDE. Lorsque je récupère les pots swt du référentiel Maven, je reçois:

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)

Quelqu'un at-il réussi à créer et à utiliser une application swt avec maven?

Modifier : j'ai effectué une petite recherche et découvert le problème. regardez mon post ci-dessous

Était-ce utile?

La solution

On dirait que Maven utilise une ancienne version de SWT. À partir de la version 3.4 (et supérieure), le fichier swt.jar est tout . SWT extraira automatiquement les .so , les .jnilib ou les .dll si nécessaire. La seule chose qui vous préoccupe, c'est de vous assurer d'obtenir le bon swt.jar (signification pour votre plate-forme).

Essayez d’installer manuellement SWT 3.4 dans votre référentiel local. Si cela vous pose toujours le même problème, alors quelque chose est probablement louche. Après cela, j’essayerais d’extraire manuellement les .so , puis de spécifier la variable java.library.path à l’aide de l’invocation d'activation -D . . Parfois, sous Linux, le chargement des bibliothèques peut échouer à cause de problèmes de dépendance (comme par exemple libpango). Dans ce cas, l'erreur sera souvent due au générique UnsatisifedLinkError , ce qui rend le problème difficile à résoudre.

Autres conseils

J'ai téléchargé le fichier win32 / 64 & amp; Les artefacts osx de la dernière version de SWT (4.2.2) dans un référentiel googlecode, vous pouvez le trouver ici:

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

Pour l'utiliser, il suffit de mettre le texte suivant dans votre pom.xml:

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

Ensuite, vous pouvez simplement référencer la dépendance SWT pertinente pour votre plate-forme. Par exemple:

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

Pour les autres plates-formes, il suffit de remplacer artifactId par la valeur appropriée:

  • 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

Des artefacts pour des plates-formes supplémentaires et des versions plus anciennes sont également disponibles, visitez le lien du référentiel ci-dessus pour les trouver.

Joyeux codage!

À partir de l'API de UnsatisfiedLinkError

  

Émis si la machine virtuelle Java ne parvient pas à trouver une définition en langage natif appropriée d'une méthode déclarée native.

Je n'ai pas essayé moi-même, mais je pense que vous devez non seulement télécharger le fichier jar principal de SWT, mais également un fichier JAR "natif" correspondant à votre plate-forme. Par exemple, swt-linux-gtk si vous êtes sous Linux?

J'ai utilisé github avec les dernières informations d'Eclipse: https://github.com/maven-eclipse/maven-eclipse.github. io . Je vous suggère de lire cela.

Le fichier pom.xml qui a fonctionné pour moi:

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

J'ai fait un peu plus de recherches à ce sujet et j'ai découvert que le pot swt se trouvait à différents endroits dans le référentiel Maven. J'utilisais des jars envoyés par le groupe swt, mais après avoir parcouru un peu les lieux, j'ai trouvé ceux qui avaient été installés par le groupe org.eclipse.swt.gtk.linux pour linux (org.eclipse.swt.win32.win32 pour Windows ). Ceci est pour la version 3.3 de swt. Toujours à la recherche de 3,4.

Depuis 2013 (cette année après la création), les choses ont changé. SWT est maintenant publié sur Maven Central. Voici les coordonnées au moment d'écrire ces lignes:

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

Vous pouvez trouver ce billet intéressant.

Derniers artefacts SWT pour Windows 64 bits: https://mvnrepository.com/artifact/org.eclipse.platform/org.eclipse.swt.win32.win32.x86_64

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top