Maven을 사용하여 SWT 응용 프로그램을 어떻게 구축합니까?
문제
나는 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
에스, .jnilib
s 또는 .dll
필요에 따라 s. 걱정해야 할 유일한 까다로운 것은 올바른 swt.jar (플랫폼의 의미)를 얻는 것입니다.
로컬 저장소에 SWT 3.4를 손으로 설치하십시오. 그것이 여전히 당신에게 같은 문제를 주면, 아마도 무언가가 어류 일 것입니다. 그 후, 나는 추출을 시도했다 .so
s 수동으로 지정한 다음 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