web-dev-qa-db-ja.com

MavenでSWTアプリケーションをどのように構築しますか

私は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アプリを正常に取得しましたか?

編集:少し調べてみたところ、問題が見つかりました。以下の私の投稿を見てください

24
Dave

Mavenが古いバージョンのSWTを導入しているようです。 v3.4(およびそれ以降)では、swt.jarはall必要です。 SWTは、必要に応じて.sos、.jnilibs、または.dllsを自動的に抽出します。心配する必要がある唯一のトリッキーなことは、正しいswt.jar(プラットフォームを意味する)を確実に取得することです。

SWT3.4をローカルリポジトリに手動でインストールしてみてください。それでも同じ問題が発生する場合は、何かが怪しい可能性があります。その後、手動で.sosを抽出し、呼び出し時にJava.library.pathスイッチを使用して-D変数を指定してみます。 Linuxでは、依存関係の問題(libpangoなど)が原因でライブラリのロードが失敗する場合があります。このような場合、エラーは一般的なUnsatisifedLinkErrorだけであることが多く、問題のデバッグが困難になります。

9
Daniel Spiewak

最新の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

追加のプラットフォームや古いバージョンのアーティファクトも利用できます。上記のリポジトリリンクにアクセスして、それらを見つけてください。

ハッピーコーディング!

19
urish

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

3
Stephan

nsatisfiedLinkError のAPIから

Java仮想マシンが、ネイティブとして宣言されたメソッドの適切な母国語定義を見つけられない場合にスローされます。

自分で試したことはありませんが、メインのSWT jarをダウンロードするだけでなく、プラットフォームをサポートする「ネイティブ」JARをダウンロードする必要があると思います。たとえば、Linuxを使用している場合はswt-linux-gtk?

2
toolkit

私は最新の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>
2
Witold Kaczurba

これについてもう少し調査したところ、swtjarがMavenリポジトリのいくつかの異なる場所にあることがわかりました。 swtグループが出したjarを使っていたのですが、少し調べてみると、Linux用のorg.Eclipse.swt.gtk.linuxグループ(Windowsの場合はorg.Eclipse.swt.win32.win32)が出したjarが見つかりました。 )。これは、swtの3.3バージョン用です。まだ3.4を探しています。

1
Dave