Вопрос

Я пытаюсь изучить SWT и использую Maven для всех своих сборок и eclipse для своей IDE.При извлечении файлов SWT из репозитория Maven я получаю:

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)

Кто-нибудь успешно получил приложение SWT для сборки и запуска с помощью Maven?

Редактировать:Я провел небольшое исследование и нашел проблему.посмотри на мой пост ниже

Это было полезно?

Решение

Похоже, что Maven использует старую версию SWT. Начиная с версии 3.4 (и выше), swt.jar - это все , что вам нужно. SWT автоматически извлечет .so , .jnilib или .dll по мере необходимости. Единственное, о чем вам нужно беспокоиться, это убедиться, что вы получите правильный swt.jar (то есть для вашей платформы).

Попробуйте вручную установить SWT 3.4 в вашем локальном хранилище. Если это все еще дает вам ту же проблему, то, возможно, что-то подозрительно. После этого я бы попытался извлечь файлы .so вручную, а затем указать переменную java.library.path , используя переключатель -D при вызове. , Иногда в Linux загрузка библиотек может быть неудачной из-за проблем с зависимостями (например, в libpango). В таких случаях часто ошибкой будет просто UnsatisifedLinkError , что затрудняет отладку проблемы.

Другие советы

Я загрузил артефакты win32/64 и osx последней версии SWT (4.2.2) в репозиторий 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>

Для других платформ просто замените артефактId соответствующим значением:

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

  

Брошенный, если Виртуальная машина Java не может найти соответствующее определение на родном языке метода, объявленного собственным.

Я сам не пробовал, но думаю, вам нужно не только загрузить основной файл SWT, но и вспомогательный «родной» файл JAR для вашей платформы. Например, swt-linux-gtk, если вы работаете в Linux?

Я использовал github с последними материалами Eclipse: https://github.com/maven-eclipse/maven-eclipse.github. Я предлагаю вам прочитать это.

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. Я использовал jar-файлы, выпущенные группой SWT, но, посмотрев немного, я обнаружил jar-файлы, выпущенные группой org.eclipse.swt.gtk.linux для linux (org.eclipse.swt.win32.win32 для Windows ). Это для версии 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>

Вы можете найти этот билет интересным.

Последние SWT-артефакты для Windows 64bit: https://mvnrepository.com/artifact/org.eclipse.platform/org.eclipse.swt.win32.win32.x86_64

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top