Java 如何使用 Maven 构建 SWT 应用程序
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/292548/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How do you build an SWT application with Maven
提问by Dave
I trying to learn swt, and I use maven for all my builds and eclipse for my IDE. When getting the swt jars out of the maven repository, I get:
我正在尝试学习 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.<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)
Has anyone successfully got a swt app to build and run using maven?
有没有人成功地使用 Maven 构建和运行 swt 应用程序?
Edit: I did a little research and found the problem. look at my post below
编辑:我做了一些研究,发现了问题。看看我下面的帖子
采纳答案by Daniel Spiewak
Sounds like Maven is pulling in an old version of SWT. As of v3.4 (and higher), the swt.jar is allyou need. SWT will automatically extract the .so
s, .jnilib
s or .dll
s as necessary. The only tricky thing you need to worry about is to ensure that you get the right swt.jar (meaning for your platform).
听起来 Maven 正在引入旧版本的 SWT。随着V3.4(或更高版本)中,SWT.JAR是所有你需要的。SWT 将根据需要自动提取.so
s、.jnilib
s 或.dll
s。您需要担心的唯一棘手的事情是确保您获得正确的 swt.jar(适用于您的平台)。
Try installing SWT 3.4 in your local repository by hand. If that still gives you the same problem, then something is probably fishy. After that, I would try extracting the .so
s manually and then specifying the java.library.path
variable using the -D
switch on invocation. Sometimes on Linux the loading of the libraries can fail due to dependency problems (in things like libpango). In such cases, often the error will be just the generic UnsatisifedLinkError
, making the problem difficult to debug.
尝试在本地存储库中手动安装 SWT 3.4。如果这仍然给您带来同样的问题,那么可能有些可疑。之后,我会尝试.so
手动提取s,然后java.library.path
使用-D
调用时的开关指定变量。有时在 Linux 上,由于依赖问题(在 libpango 之类的东西中),库的加载可能会失败。在这种情况下,错误通常只是泛型UnsatisifedLinkError
,使问题难以调试。
回答by toolkit
From the API of UnsatisfiedLinkError
来自UnsatisfiedLinkError的 API
Thrown if the Java Virtual Machine cannot find an appropriate native-language definition of a method declared native.
如果 Java 虚拟机找不到声明为 native 的方法的合适的本地语言定义,则抛出。
I haven't tried it myself, but I think you not only need to download the main SWT jar, but a supporting 'native' JAR for your platform. For example swt-linux-gtk if you're on Linux?
我自己还没有尝试过,但我认为您不仅需要下载主要的 SWT jar,还需要为您的平台下载支持的“本机”JAR。例如 swt-linux-gtk 如果你在 Linux 上?
回答by Dave
I did a little more research on this and found that the swt jar is in a couple different places in the maven repository. I was using jars put out by the swt group, but after looking around a bit, I found the jars put out by the org.eclipse.swt.gtk.linux group for linux (org.eclipse.swt.win32.win32 for Windows). This is for the 3.3 version of swt. Still looking for 3.4.
我对此进行了更多研究,发现 swt jar 位于 maven 存储库中的几个不同位置。我正在使用 swt 组推出的 jars,但环顾四周后,我发现 org.eclipse.swt.gtk.linux 组推出的 jars for linux (org.eclipse.swt.win32.win32 for Windows )。这是针对 3.3 版本的 swt。仍在寻找3.4。
回答by urish
I have uploaded the win32/64 & osx artifacts of the latest SWT version (4.2.2) to a googlecode repository, you can find it here:
我已将最新 SWT 版本 (4.2.2) 的 win32/64 和 osx 工件上传到 googlecode 存储库,您可以在此处找到它:
https://swt-repo.googlecode.com/svn/repo/
https://swt-repo.googlecode.com/svn/repo/
To use it just put the following in your pom.xml:
要使用它,只需将以下内容放入您的 pom.xml 中:
<repositories>
<repository>
<id>swt-repo</id>
<url>https://swt-repo.googlecode.com/svn/repo/</url>
</repository>
</repositories>
Then you can just reference the SWT dependency relevant to your platform. For example:
然后您可以只引用与您的平台相关的 SWT 依赖项。例如:
<dependency>
<groupId>org.eclipse.swt</groupId>
<artifactId>org.eclipse.swt.win32.win32.x86</artifactId>
<version>4.2.2</version>
</dependency>
For other platforms, just replace artifactId with the appropriate value:
对于其他平台,只需将 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
- 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
Artifacts for additional platforms and older versions are available as well, visit the repository link above to find them.
其他平台和旧版本的工件也可用,请访问上面的存储库链接以找到它们。
Happy coding!
快乐编码!
回答by Stephan
Since 2013 (this post inception year), things has changed. SWT is now published on Maven Central. Here are the coordinates as of this writing:
自 2013 年(此后成立年份)以来,情况发生了变化。SWT 现在发布在 Maven Central 上。以下是撰写本文时的坐标:
<dependency>
<groupId>org.eclipse.platform</groupId>
<artifactId>org.eclipse.swt.win32.win32.x86_64</artifactId>
<version>${swt.version}</version>
</dependency>
You may find this ticketinteresting.
您可能会发现这张票很有趣。
Latest SWT artefacts for windows 64bit: https://mvnrepository.com/artifact/org.eclipse.platform/org.eclipse.swt.win32.win32.x86_64
适用于 Windows 64 位的最新 SWT 人工制品:https: //mvnrepository.com/artifact/org.eclipse.platform/org.eclipse.swt.win32.win32.x86_64
回答by Witold Kaczurba
I used github with latest Eclipse's stuff: https://github.com/maven-eclipse/maven-eclipse.github.io. I suggest you read that.
我将 github 与最新的 Eclipse 内容一起使用:https: //github.com/maven-eclipse/maven-eclipse.github.io。我建议你读那个。
The pom.xml that worked for me:
对我有用的 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>