MavenでSWTアプリケーションをどのように構築しますか
質問
SWTを学習しようとしていますが、すべてのビルドでmavenを使用し、IDEでEclipseを使用しています。 Mavenリポジトリからswt jarを取得すると、次のようになります。
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
s、 .jnilib
s、または .dll
sを自動的に抽出します。心配する必要がある唯一の注意が必要なことは、正しいswt.jar(プラットフォームを意味する)を確実に取得することです。
手動でローカルリポジトリにSWT 3.4をインストールしてください。それでも同じ問題が発生する場合は、おそらく怪しいものです。その後、手動で .so
sを抽出し、呼び出し時に -D
スイッチを使用して java.library.path
変数を指定してみます。 。 Linuxでは、依存関係の問題(libpangoなど)が原因でライブラリのロードが失敗することがあります。このような場合、多くの場合、エラーは一般的な UnsatisifedLinkError
であるため、問題のデバッグが困難になります。
他のヒント
win32 / 64&amp;をアップロードしました最新のSWTバージョン(4.2.2)の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
追加のプラットフォームおよび古いバージョンのアーティファクトも利用できます。上のリポジトリリンクにアクセスしてそれらを見つけてください。
ハッピーコーディング!
UnsatisfiedLinkError の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>
これについてもう少し調べたところ、swt jarがmavenリポジトリーのいくつかの異なる場所にあることがわかりました。私はswtグループによって出力されたjarを使用していましたが、少し調べてみると、Linuxのorg.eclipse.swt.gtk.linuxグループ(Windowsの場合はorg.eclipse.swt.win32.win32)によって出力されたjarが見つかりました。 )。これはswtの3.3バージョン用です。まだ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