문제

나는 SWT를 배우려고 노력했고, 모든 빌드에 Maven을 사용하고 IDE를 위해 일식을 사용합니다. Maven 저장소에서 SWT 항아리를 꺼내면 다음과 같습니다.

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)

Maven을 사용하여 구축하고 실행할 SWT 앱을 성공적으로 얻은 사람이 있습니까?

편집하다: 나는 약간의 연구를하고 문제를 발견했습니다. 아래 내 게시물을보십시오

도움이 되었습니까?

해결책

Maven이 이전 버전의 SWT를 당기는 것처럼 들립니다. v3.4 (이상) 기준으로 Swt.jar는 모두 당신은 필요합니다. SWT는 자동으로 추출합니다 .so에스, .jnilibs 또는 .dll필요에 따라 s. 걱정해야 할 유일한 까다로운 것은 올바른 swt.jar (플랫폼의 의미)를 얻는 것입니다.

로컬 저장소에 SWT 3.4를 손으로 설치하십시오. 그것이 여전히 당신에게 같은 문제를 주면, 아마도 무언가가 어류 일 것입니다. 그 후, 나는 추출을 시도했다 .sos 수동으로 지정한 다음 java.library.path 변수를 사용합니다 -D 호출을 켜십시오. 때때로 Linux에서는 의존성 문제 (libpango와 같은 것들에서)로 인해 라이브러리의 로딩이 실패 할 수 있습니다. 그러한 경우 종종 오류는 일반적인 것입니다. UnsatisifedLinkError, 문제를 디버깅하기 어렵게 만듭니다.

다른 팁

최신 SWT 버전 (4.2.2)의 Win32/64 & OSX 아티팩트를 GoogleCode 저장소에 업로드했습니다. 여기에서 찾을 수 있습니다.

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

사용하려면 다음을 pom.xml에 넣습니다.

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

그런 다음 플랫폼과 관련된 SWT 종속성을 참조 할 수 있습니다. 예를 들어:

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

다른 플랫폼의 경우 artifactid를 적절한 값으로 바꾸십시오.

  • 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

추가 플랫폼 및 기존 버전의 아티팩트도 사용할 수 있습니다. 위의 저장소 링크를 방문하여 찾을 수 있습니다.

행복한 코딩!

API에서 불만족스러운 링크러

Java 가상 머신이 네이티브로 선언 된 메소드의 적절한 기본 언어 정의를 찾을 수없는 경우 던져졌습니다.

나는 직접 시도하지 않았지만 메인 SWT 용기를 다운로드해야 할뿐만 아니라 플랫폼을위한 지원하는 '기본'항아리를 다운로드해야한다고 생각합니다. 예를 들어 Linux에있는 경우 SWT-LINUX-GTK?

나는 최신 Eclipse의 물건과 함께 Github를 사용했습니다.https://github.com/maven-eclipse/maven-eclipse.github.io . 나는 당신이 그것을 읽는 것이 좋습니다.

나를 위해 일한 pom.xml :

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

나는 이것에 대해 조금 더 연구를했고 SWT 항아리가 Maven 저장소의 몇 가지 다른 장소에 있음을 발견했습니다. 나는 SWT 그룹이 내놓은 항아리를 사용하고 있었지만 조금 둘러 보면 Linux 용 org.eclipse.swt.gtk.linux 그룹 (Windows 용 Org.eclipse.swt.win322)에 의해 항아리가 내놓았다는 것을 알았습니다. ). 이것은 3.3 버전의 SWT를위한 것입니다. 여전히 3.4를 찾고 있습니다.

2013 년 (이 게시물 창립 연도) 이후 상황이 바뀌 었습니다. SWT는 현재 Maven Central에 게시되었습니다. 이 글을 쓰는 시점의 좌표는 다음과 같습니다.

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

당신은 이것을 찾을 수 있습니다 티켓 흥미로운.

Windows 64 비트의 최신 SWT 인공물 : https://mvnrepository.com/artifact/org.eclipse.platform/org.eclipse.swt.win32.win32.x86_64

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top