在Java15模块化设置中使用eclipse中的swt

vc9ivgsu  于 2021-06-29  发布在  Java
关注(0)|答案(1)|浏览(428)

我只是想得到基本的helloworld(项目) Trial0 )应用程序运行使用:
eclipse版本:2020-12(4.18.0)
使用swt 4.18(linux、gtk)
java编译器设置为15
按照使用eclipse开发swt应用程序的描述(有点古老,是关于JDK1.4和SWT3.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 binary and source”并下载zip swt-4.18-gtk-linux-x86_64.zip。
zip包含“swt.jar”(其中包含“.so”文件)。启动eclipse的“file>import>general>existingprojectintoworkspace”,选择上面的zip文件作为“归档文件”
在使用导入的swt项目的项目中,我立即遇到了模块化/拼图障碍。显然,编译器不允许查看未模块化的swt类:
“包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 jar拉到模块化的土地上?

wb1gzix0

wb1gzix01#

从jar文件中描述模块的输出可以看出。
在你的 module-info.java 文件中,应添加以下指令:

requires swt;

这将为您提供访问包的权限 org.eclipse.swt.widgets 哪个模块 swt (自动模块名)声明

contains org.eclipse.swt.widgets

在它的描述本身。
文件 module-info.java 现在导入项目的包含:

module trial0 {
    requires java.desktop;
    requires swt;
}

eclipse将此警告附加到行 requires swt; :
自动模块“swt”的名称不稳定,它是从模块的文件名派生的。
没关系。
以上可能仍然不起作用。在这种情况下,请验证以下内容:
项目 org.eclipse.swt 位于导入项目的modulepath上,而不是类路径上:

导入的模块需要有访问规则。以下访问规则似乎有效:

请注意,导入项目的“模块依赖项”中没有定义任何特定的内容:

相关问题