私はswtを学ぼうとしていますが、すべてのビルドにmavenを使用し、IDEにEclipseを使用しています。 mavenリポジトリからswtjarを取得すると、次のようになります。
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はall必要です。 SWTは、必要に応じて.so
s、.jnilib
s、または.dll
sを自動的に抽出します。心配する必要がある唯一のトリッキーなことは、正しいswt.jar(プラットフォームを意味する)を確実に取得することです。
SWT3.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を適切な値に置き換えるだけです。
追加のプラットフォームや古いバージョンのアーティファクトも利用できます。上記のリポジトリリンクにアクセスして、それらを見つけてください。
ハッピーコーディング!
2013年(このポスト開始年)以来、状況は変化しました。 SWTがMavenCentralで公開されるようになりました。この記事の執筆時点での座標は次のとおりです。
<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
nsatisfiedLinkError のAPIから
Java仮想マシンが、ネイティブとして宣言されたメソッドの適切な母国語定義を見つけられない場合にスローされます。
自分で試したことはありませんが、メインのSWT jarをダウンロードするだけでなく、プラットフォームをサポートする「ネイティブ」JARをダウンロードする必要があると思います。たとえば、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>
これについてもう少し調査したところ、swtjarがMavenリポジトリのいくつかの異なる場所にあることがわかりました。 swtグループが出したjarを使っていたのですが、少し調べてみると、Linux用のorg.Eclipse.swt.gtk.linuxグループ(Windowsの場合はorg.Eclipse.swt.win32.win32)が出したjarが見つかりました。 )。これは、swtの3.3バージョン用です。まだ3.4を探しています。