在Java15模块化设置中使用Eclipse中的SWT
我只是尝试使用以下命令运行基本的Hello World(项目Trial0
)应用程序:
- Eclipse版本:2020-12(4.18.0)
- 使用SWT 4.18(Linux、GTK)
- 将Java编译器设置为15
按照Developing SWT applications using Eclipse中的描述(有点古老,是关于JDK 1.4和SWT 3.1),我已经将SWT项目导入到Eclipse中:
- 转到https://download.eclipse.org/eclipse/downloads/index.html#Stable_Builds
- 单击";4.18";到达https://download.eclipse.org/eclipse/downloads/drops4/R-4.18-202012021800/
- 向下滚动,直到到达";SWT二进制文件和源代码,然后下载压缩文件(&QOT;SWT BINARY&SOURCE&QOOT;) swt-4.18-gtk-linux-x86_64.zip。
- 压缩包包含‘swt.jar’(包含‘.so’文件)。启动Eclipse的";File>;Import>;General&>Existing Projects to Workspace";,然后选择上面的zip作为";Archive File";
我立即在使用导入的SWT项目的项目中遇到模块化/Jigsaw问题。编译器显然不允许查看未模块化的SWT类:
&q;无法访问org.eclipse.swt.widgets包
在此代码中:
package trial;
import org.eclipse.swt.widgets.*; // "The package org.eclipse.swt.widgets is not accessible"
public class MyApp {
}
这里是项目:
注意导入项目上的module-info.java
文件。它包含:
module trial0 {
requires java.desktop;
}
swt.jar
确实不播发模块:
$ jar --file=swt.jar --describe-module
No module descriptor found. Derived automatic module.
swt automatic
requires java.base mandated
contains org.eclipse.swt
contains org.eclipse.swt.accessibility
contains org.eclipse.swt.awt
contains org.eclipse.swt.browser
contains org.eclipse.swt.custom
contains org.eclipse.swt.dnd
contains org.eclipse.swt.events
contains org.eclipse.swt.graphics
contains org.eclipse.swt.internal
contains org.eclipse.swt.internal.accessibility.gtk
contains org.eclipse.swt.internal.cairo
contains org.eclipse.swt.internal.dnd.gtk
contains org.eclipse.swt.internal.gtk
contains org.eclipse.swt.internal.image
contains org.eclipse.swt.internal.opengl.glx
contains org.eclipse.swt.internal.webkit
contains org.eclipse.swt.layout
contains org.eclipse.swt.opengl
contains org.eclipse.swt.printing
contains org.eclipse.swt.program
contains org.eclipse.swt.widgets
是否需要将module-info.java
个文件添加到SWT JAR中?有没有另一种将SWT罐子拉到模块化区域的&规范&方法?
解决方案
根据输出describing the module from the jar文件可以看到。
在module-info.java
文件中,您需要添加以下指令:
requires swt;
这将为您提供对模块swt
(自动模块名称)声明的包org.eclipse.swt.widgets
的访问权限
contains org.eclipse.swt.widgets
其描述本身。
导入项目的文件module-info.java
现在包含:
module trial0 {
requires java.desktop;
requires swt;
}
Eclipse将此警告附加到行requires swt;
:
自动模块"swt"的名称不稳定,它派生自 模块的文件名。
没关系。
以上可能仍不起作用。在这种情况下,请验证以下内容:
项目org.eclipse.swt
位于导入项目的Modulepath,而不是Classpath:
导入的模块上需要有访问规则。以下访问规则似乎有效:
请注意,在";模块依赖项";中没有为导入项目定义任何特定内容:
相关文章