Como você cria um aplicativo SWT com Maven
Pergunta
Eu tentando aprender swt, e eu utilizar o Maven para todos os meus constrói e eclipse para o meu IDE. Ao obter o swt frascos para fora do repositório maven, eu recebo:
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)
Alguém com sucesso tem um swt aplicativo para criar e executar com o Maven?
Editar : Eu fiz uma pequena pesquisa e descobriu o problema. olhada no meu post abaixo
Solução
soa como Maven está puxando em uma versão antiga do SWT. A partir de v3.4 (e superior), o swt.jar é todas que você precisa. SWT irá extrair automaticamente os .so
s, .jnilib
s ou .dll
s conforme necessário. A única coisa complicada que você precisa se preocupar é para garantir que você obtenha o swt.jar direita (sentido para sua plataforma).
Tente instalar SWT 3.4 em seu repositório local com a mão. Se isso ainda lhe dá o mesmo problema, então algo está provavelmente suspeito. Depois disso, gostaria de tentar extrair os .so
s manualmente e, em seguida, especificando a variável java.library.path
usando o interruptor -D
na invocação. Às vezes, no Linux o carregamento das bibliotecas podem falhar devido a problemas de dependência (em coisas como libpango). Nesses casos, muitas vezes, o erro será apenas o UnsatisifedLinkError
genéricos, tornando o problema difícil de depuração.
Outras dicas
Eu tenho carregado o Win32 / 64 & OSX artefatos da versão mais recente do SWT (4.2.2) para um repositório GoogleCode, você pode encontrá-lo aqui:
https://swt-repo.googlecode.com/svn/repo/
Para usá-lo basta colocar o seguinte em seu pom.xml:
<repositories>
<repository>
<id>swt-repo</id>
<url>https://swt-repo.googlecode.com/svn/repo/</url>
</repository>
</repositories>
Em seguida, você pode apenas referenciar o SWT dependência relevantes para sua plataforma. Por exemplo:
<dependency>
<groupId>org.eclipse.swt</groupId>
<artifactId>org.eclipse.swt.win32.win32.x86</artifactId>
<version>4.2.2</version>
</dependency>
Para outras plataformas, basta substituir artifactId com o valor apropriado:
- 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
Artifacts para plataformas adicionais e versões mais antigas também estão disponíveis, visite o link repositório acima para encontrá-los.
Happy codificação!
A partir da API do UnsatisfiedLinkError
Lançada se a Java Virtual Machine não consegue encontrar uma definição de um método idioma nativo apropriado declarou nativa.
Eu não tentei me, mas acho que você não só precisa baixar o principal jar SWT, mas um apoio JAR 'nativo' para sua plataforma. Por exemplo swt-linux-gtk se você estiver em Linux?
Eu costumava github com o mais recente material de Eclipse: https://github.com/maven-eclipse/maven-eclipse.github. io . Eu sugiro que você leia isso.
O pom.xml que funcionou para mim:
<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>
Eu fiz um pouco mais pesquisas sobre isso e descobriu que o frasco swt é em um par de lugares diferentes no repositório Maven. Eu estava usando potes de colocar para fora pelo grupo swt, mas depois de olhar em volta um pouco, descobri os frascos posto para fora pelo grupo org.eclipse.swt.gtk.linux para linux (org.eclipse.swt.win32.win32 para Windows ). Isto é para a versão 3.3 do SWT. Ainda à procura de 3.4.
Desde 2013 (este ano pós começo), as coisas mudou. SWT é agora publicada em Maven Central. Aqui estão as coordenadas como esta escrito:
<dependency>
<groupId>org.eclipse.platform</groupId>
<artifactId>org.eclipse.swt.win32.win32.x86_64</artifactId>
<version>${swt.version}</version>
</dependency>
Você pode encontrar este bilhete interessante.
Últimas artefatos SWT para janelas 64bit: https://mvnrepository.com/artifact/org.eclipse.platform/org.eclipse.swt.win32.win32.x86_64