Как вы создаете приложение SWT с помощью Maven

Я пытаюсь изучить 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?

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


person Dave    schedule 15.11.2008    source источник
comment
Быстро: репозиторий maven github.com/maven-eclipse/maven-eclipse.github. io -- с 2014 года. googlecode мертв.   -  person leo    schedule 08.12.2016


Ответы (6)


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

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

person Daniel Spiewak    schedule 15.11.2008

Я загрузил артефакты 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>

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

  • 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

Артефакты для дополнительных платформ и более старых версий также доступны, перейдите по ссылке выше, чтобы найти их.

Удачного кодирования!

person urish    schedule 02.04.2012
comment
Что касается умирающей службы кода Google: взгляните на этот обновленный ответ: stackoverflow.com/questions/5096299/ - person hennr; 31.05.2015
comment
репозиторий maven github.com/maven-eclipse/maven-eclipse.github.io -- с 2014 года. - person leo; 08.12.2016
comment
SWT теперь опубликован на Maven Central. См. этот ответ: stackoverflow.com/a/15487277/363573 - person Stephan; 20.12.2017

С 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

person Stephan    schedule 18.03.2013

Из API UnsatisfiedLinkError

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

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

person toolkit    schedule 15.11.2008

Я использовал github с последними материалами Eclipse: 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>
person Witold Kaczurba    schedule 05.04.2017

Я провел еще немного исследований по этому вопросу и обнаружил, что swt jar находится в нескольких разных местах в репозитории maven. Я использовал jar-файлы, выпущенные группой swt, но, немного осмотревшись, я обнаружил, что jar-файлы, выпущенные группой org.eclipse.swt.gtk.linux для Linux (org.eclipse.swt.win32.win32 для Windows ). Это для версии 3.3 swt. Все еще ищу 3.4.

person Dave    schedule 20.11.2008
comment
Если это может кому-то помочь, я начал развертывание артефактов SWT в своем общедоступном репозитории: maven. ju-n.net/maven2/org/swt - person nicoulaj; 26.06.2010
comment
Нет, они не. Кстати, URL моего репозитория изменился: maven.ju-n.net/public - person nicoulaj; 26.02.2011
comment
См. мой ответ ниже для актуального репозитория с артефактами SWT 3.7.2. - person urish; 03.04.2012