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

Foi útil?

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 .sos, .jnilibs ou .dlls 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 .sos 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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top