plugin exclude java maven-2 swt

java - exclude - resources build maven



¿Cómo construyes una aplicación SWT con Maven? (6)

De la API de UnsatisfiedLinkError

Lanzado si la Máquina Virtual Java no puede encontrar una definición apropiada del idioma nativo de un método declarado nativo.

No lo he intentado solo, pero creo que no solo es necesario descargar el contenedor SWT principal, sino también un JAR ''nativo'' para su plataforma. Por ejemplo swt-linux-gtk si estás en Linux?

Estoy tratando de aprender swt, y uso maven para todas mis compilaciones y eclipse para mi IDE. Al sacar los contenedores swt del repositorio maven, obtengo:

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 ha conseguido con éxito una aplicación swt para compilar y ejecutar usando maven?

Editar : Investigué un poco y encontré el problema. mira mi publicación a continuación


Parece que Maven está sacando una versión antigua de SWT. A partir de v3.4 (y superior), swt.jar es todo lo que necesita. SWT extraerá automáticamente .jnilib s, .jnilib s o .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, trataría de extraer manualmente el java.library.path y luego especificar la variable java.library.path usando el java.library.path -D en la invocación. 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 el UnsatisifedLinkError genérico, lo que dificulta la depuración del problema.


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.


He subido los artefactos win32 / 64 y osx de la última versión de SWT (4.2.2) a un repositorio de googlecode, puede encontrarlo aquí:

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

Para usarlo simplemente ponga lo siguiente en su pom.xml:

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

Luego, puede hacer referencia a la dependencia de 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, simplemente reemplace artifactId con el valor apropiado:

  • 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

Los artefactos para plataformas adicionales y versiones anteriores también están disponibles, visite el enlace del repositorio arriba para encontrarlos.

Feliz codificación!


Usé github con las últimas novedades de Eclipse: https://github.com/maven-eclipse/maven-eclipse.github.io . Te sugiero que leas eso.

El pom.xml que funcionó 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>


Desde 2013 (este año de inicio de publicación), las cosas han cambiado. SWT ahora se publica en Maven Central. Aquí están las coordenadas al momento de escribir esto:

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

Puede encontrar este boleto interesante.

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