如何使用Maven构建SWT应用程序

我试图学习swt,我使用maven进行所有构建,并使用eclipse进行IDE。 当从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.(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.(Display.java:112) at wenzlick.test.swt.main.Main.main(Main.java:30) 

有没有人成功获得使用maven构建和运行的swt应用程序?

编辑 :我做了一点研究,发现了问题。 看看我下面的post

听起来Maven正在推出一个旧版本的SWT。 从v3.4(及更高版本)开始,swt.jar就是你所需要的。 SWT将根据需要自动提取.so s, .jnilib.dll 。 您需要担心的唯一棘手的事情是确保您获得正确的swt.jar(意味着您的平台)。

尝试手动在本地存储库中安装SWT 3.4。 如果这仍然给你同样的问题,那么一些东西可能是可疑的。 之后,我会尝试手动提取.so ,然后使用-D开关调用指定java.library.path变量。 有时在Linux上,由于依赖性问题(例如libpango之类的东西),库的加载可能会失败。 在这种情况下,错误通常只是通用的UnsatisifedLinkError ,使问题难以调试。

我已将最新SWT版本(4.2.2)的win32 / 64和osx工件上传到googlecode存储库,您可以在此处找到它:

https://swt-repo.googlecode.com/svn/repo/

要使用它,只需将以下内容放在pom.xml中:

   swt-repo https://swt-repo.googlecode.com/svn/repo/   

然后,您只需引用与您的平台相关的SWT依赖项。 例如:

   org.eclipse.swt org.eclipse.swt.win32.win32.x86 4.2.2  

对于其他平台,只需将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虚拟机无法找到声明为native的方法的适当本机语言定义,则抛出此exception。

我自己没有尝试过,但我认为你不仅需要下载主要的SWT jar,而且需要为你的平台下载一个支持“原生”的JAR。 例如swt-linux-gtk如果你在Linux上?

我使用了最新Eclipse的github: https : //github.com/maven-eclipse/maven-eclipse.github.io 。 我建议你读一下。

适合我的pom.xml:

  4.0.0 com.whatever whatever 0.0.1-SNAPSHOT jar swt http://maven.apache.org   maven-eclipse-repo http://maven-eclipse.github.io/maven    UTF-8 1.8 1.8 4.6    junit junit 4.12 test    org.eclipse.swt org.eclipse.swt.win32.win32.x86_64 ${swt.version}   org.eclipse.swt org.eclipse.swt.win32.win32.x86 ${swt.version}  debug   org.eclipse.swt org.eclipse.swt.gtk.linux.x86 ${swt.version}   org.eclipse.swt org.eclipse.swt.gtk.linux.x86_64 ${swt.version}   org.eclipse.swt org.eclipse.swt.cocoa.macosx.x86_64 ${swt.version}    

我对此进行了一些研究,发现swt jar位于maven存储库中的几个不同位置。 我正在使用swt小组推出的jar子,但是在看了一下之后,我发现了org.eclipse.swt.gtk.linux组为linux发布的jar(org.eclipse.swt.win32.win32 for Windows) )。 这是针对swt的3.3版本。 仍在寻找3.4。

自2013年(本年度开始)以来,情况发生了变化。 SWT现在在Maven Central上发布。 以下是撰写本文时的坐标:

  org.eclipse.platform org.eclipse.swt.win32.win32.x86_64 ${swt.version}  

你会发现这张票很有趣。

适用于Windows 64位的最新SWT工件: https : //mvnrepository.com/artifact/org.eclipse.platform/org.eclipse.swt.win32.win32.x86_64