2008-11-15 27 views
18

Estoy tratando de aprender swt, y uso maven para todas mis compilaciones y eclipse para mi IDE. Al obtener los frascos swt fuera del repositorio de Maven, me sale:¿Cómo se puede construir una aplicación SWT con Maven

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) 

alguien tiene éxito una aplicación SWT para generar y ejecutar el uso experto?

Editar: Hice un poco de investigación y encontré el problema. mira mi post de abajo

+0

rápida: experto repo https://github.com/maven-eclipse/maven-eclipse.github.io - desde 2014. googlecode está muerto . – leo

Respuesta

9

Parece que Maven está sacando una versión anterior de SWT. A partir de v3.4 (y superior), swt.jar es todo que necesite. SWT extraerá automáticamente .so s, .jnilib so .dll s según sea necesario. Lo único delicado de lo que debe preocuparse es asegurarse de obtener el swt.jar correcto (lo que significa para su plataforma).

Intente instalar SWT 3.4 en su repositorio local a mano. Si eso todavía te da el mismo problema, entonces algo probablemente sea sospechoso. Después de eso, intentaría extraer el .so de forma manual y luego especificando la variable java.library.path con el interruptor -D al invocar. A veces, en Linux, la carga de las bibliotecas puede fallar debido a problemas de dependencia (en cosas como libpango). En tales casos, a menudo el error será solo genérico UnsatisifedLinkError, lo que hace que el problema sea difícil de depurar.

2

De la API de UnsatisfiedLinkError

produce si la máquina virtual de Java no puede encontrar una definición adecuada de la lengua materna de un método declarado nativa.

No lo he probado, pero creo que no solo tiene que descargar el jar principal de SWT, sino también un JAR "nativo" para su plataforma. Por ejemplo swt-linux-gtk si estás en Linux?

1

Hice un poco más de investigación sobre esto y encontré que el contenedor swt está en un par de lugares diferentes en el repositorio de maven. Estaba usando jarras colocadas por el grupo swt, pero después de mirar un poco, encontré las jarras colocadas por el grupo org.eclipse.swt.gtk.linux para Linux (org.eclipse.swt.win32.win32 para Windows) Esto es para la versión 3.3 de swt. Todavía estoy buscando 3.4.

+3

Si esto puede ayudar a alguien, he comenzado a implementar artefactos SWT en mi repositorio público: http://maven.ju-n.net/maven2/org/swt/ – nicoulaj

+0

Julien: ¿te importaría subir la versión más reciente? –

+0

@Julien Nicolaud: ¿estás en el equipo de SWT? son las construcciones oficiales o? .. –

17

He subido el Win32/64 & artefactos osx de la última versión SWT (4.2.2) a un repositorio googlecode, se puede encontrar aquí:

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

Para usarlo sólo hay que poner la siguiendo en su pom.xml:

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

Luego puede simplemente hacer referencia a la dependencia SWT relevante para su plataforma. Por ejemplo:

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

para otras plataformas, basta con sustituir artifactId con el valor adecuado:

  • 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

Artefactos para plataformas adicionales y versiones anteriores están disponibles, así, visite el enlace repositorio de arriba para encontrarlos.

Happy coding!

+2

En cuanto al código de google agonizante servicio: eche un vistazo a esta respuesta actualizada: http://stackoverflow.com/questions/5096299/maven-project-swt-3-5-dependency-any-official-public-repo/9985222#9985222 – hennr

+0

maven repo https: //github.com/maven-eclipse/maven-eclipse.github.io - desde 2014. – leo

+0

SWT ahora se publica en Maven Central. Ver este artículo: https://stackoverflow.com/a/15487277/363573 – Stephan

1

Desde 2013 (este año de inicio de publicación), las cosas han cambiado. SWT ahora se publica en Maven Central. Estas son las coordenadas de este escrito:

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

Usted puede encontrar esta ticket interesante.

últimos artefactos SWT para Windows de 64 bits: https://mvnrepository.com/artifact/org.eclipse.platform/org.eclipse.swt.win32.win32.x86_64

2

que utilizan github con cosas más reciente de Eclipse: https://github.com/maven-eclipse/maven-eclipse.github.io. Te sugiero que leas eso.

El pom.xml que trabajó para mí:

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