Domanda

Sto cercando di imparare swt e uso maven per tutte le mie build ed eclissi per il mio IDE. Quando estraggo i vasetti SWT dal repository Maven, ottengo:

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)

Qualcuno ha ottenuto con successo un'app swt da compilare ed eseguire utilizzando Maven?

Modifica : ho fatto una piccola ricerca e ho riscontrato il problema. guarda il mio post qui sotto

È stato utile?

Soluzione

Sembra che Maven stia inserendo una vecchia versione di SWT. A partire dalla v3.4 (e successive), swt.jar è tutto necessario. SWT estrae automaticamente i .so , i .jnilib o i .dll se necessario. L'unica cosa difficile di cui devi preoccuparti è assicurarti di ottenere il giusto swt.jar (che significa per la tua piattaforma).

Prova a installare manualmente SWT 3.4 nel tuo repository locale. Se questo ti dà ancora lo stesso problema, probabilmente qualcosa è sospetto. Dopodiché, proverei a estrarre manualmente .so e quindi a specificare la variabile java.library.path utilizzando l'opzione -D sull'invocazione . A volte su Linux il caricamento delle librerie può fallire a causa di problemi di dipendenza (in cose come libpango). In questi casi, spesso l'errore sarà solo il UnsatisifedLinkError generico, rendendo difficile il debug del problema.

Altri suggerimenti

Ho caricato win32 / 64 & amp; artefatti osx dell'ultima versione SWT (4.2.2) in un repository googlecode, puoi trovarlo qui:

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

Per usarlo basta inserire quanto segue nel tuo pom.xml:

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

Quindi puoi semplicemente fare riferimento alla dipendenza SWT relativa alla tua piattaforma. Ad esempio:

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

Per altre piattaforme, basta sostituire artefactId con il valore appropriato:

  • 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

Sono disponibili anche artefatti per piattaforme aggiuntive e versioni precedenti, visitare il link al repository sopra per trovarli.

Buona codifica!

Dall'API di UnsatisfiedLinkError

  

Generato se la Java Virtual Machine non riesce a trovare una definizione in lingua nativa appropriata di un metodo dichiarato nativo.

Non l'ho provato da solo, ma penso che non solo devi scaricare il jar SWT principale, ma un JAR "nativo" di supporto per la tua piattaforma. Ad esempio swt-linux-gtk se sei su Linux?

Ho usato github con le ultime cose di Eclipse: https://github.com/maven-eclipse/maven-eclipse.github. io . Ti suggerisco di leggerlo.

Il pom.xml che ha funzionato per me:

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

Ho fatto qualche ricerca in più su questo e ho scoperto che il vaso SWT si trova in un paio di posti diversi nel repository Maven. Stavo usando i vasetti messi fuori dal gruppo swt, ma dopo essermi guardato un po 'in giro, ho trovato i vasetti messi fuori dal gruppo org.eclipse.swt.gtk.linux per Linux (org.eclipse.swt.win32.win32 per Windows ). Questo è per la versione 3.3 di swt. Sto ancora cercando 3.4.

Dal 2013 (questo anno di inizio post), le cose sono cambiate. SWT è ora pubblicato su Maven Central. Ecco le coordinate al momento della stesura di questo documento:

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

Puoi trovare interessante questo ticket

Manufatti SWT più recenti per Windows a 64 bit: https://mvnrepository.com/artifact/org.eclipse.platform/org.eclipse.swt.win32.win32.x86_64

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top