当前位置: 首页 > 知识库问答 >
问题:

Eclipse与导入混淆(“可从多个模块访问”)

蒋波光
2023-03-14

当引用简单的.jar文件时,Eclipse会显示一个错误,该错误说明:

包java.awt可以从多个模块访问: ,java.desktop

package test;

import javax.swing.JDialog;

public class Test {
    public static void main(String[] args) {
        new JDialog();
    }
}

将一个.jar文件添加到类路径中,只使用javax/swing文件夹结构(不需要文件)将导致出现错误。我使用的是JDK10/12(两者都不起作用)。将编译器遵从性设置为1.8可以使整个过程再次运行。在另一台具有Eclipse 2018-09的计算机上,它与编译器遵从性设置为10一起工作。

我在Eclipse2019-03,在一个(出于测试目的)新安装Eclipse 2018-09上运行良好。为什么?

编辑June/2020(解决方案)

正如答案所正确说明的那样,这是一个很久以前就内置在Java中的限制,直到最近才强加给我们。我是在将一个有几十个依赖项的大项目迁移到Maven时接触到它的。2000年左右就有图书馆了!有“元库”,它由几个打包在一起的库组成。因此,除了识别还需要什么(和其他的一起放入垃圾箱!)、更新违反规则的库或为它们找到替代品之外,别无他法。这花了我很多很多个小时。

最后,它成功了,我们有了一个很好的Maven项目。

共有1个答案

洪和风
2023-03-14

这是由

  • 类路径上的一个JAR,它包含java.awt包,该包也存在于系统库中,但
  • JRE系统库位于modulePath上

在Java平台模块系统(JPMS)中,不允许在多个模块中使用相同的包。如果使用Modulepath和类路径,则类路径上的所有内容都作为 模块处理(在您的示例中,java.awt包存在于系统模块java.desktox中,也通过模块 中类路径上的JAR处理)。

  • 将编译器遵从性设置为1.8(正如您已经提到的那样)
  • 重新构建了JAR,以避免JAR中的Java系统库包名(如果使用反射,则可能需要额外的代码更改):
    • 如果您有源代码,请更改包名称(例如将包和子包java更改为java_utiljava_util),并重新创建JAR
    • 如果只有.class文件,则必须首先反编译.class文件

 类似资料:
  • Eclipse RCP 2020-09,Java JDK 11,Window10 步 1.创建一个简单的插件项目(单击[下一步][完成]) 2.要求捆绑包:org.eclipse.jdt.core 3.创建Java文件 编译错误:

  • 尝试在JMX控制台中注册MBean时,我收到以下错误消息: 我正在使用Eclipse,我的项目结构中没有文件。 当我注释我对javaeeapi的依赖关系时,错误消失了,但是包不是JAR的一部分。

  • 我有PHP(以及其他一些东西)的背景,我正在玩Python。在PHP中,当我想包含另一个文件时,我只需执行或,该文件中的所有内容都包含在内。 但是在python中,推荐的方法似乎是从文件导入,但这似乎更适合包含库和东西?如何在多个文件中分离代码?唯一的方法是使用一个包含一大堆函数调用的文件,然后导入15个其他文件吗?

  • 我的环境: Java 11 不确定如何修复此错误:

  • 我的项目在Java1.8u151中运行良好。我正在尝试将它升级到Java12,但是我得到了以下错误。 这是唯一的错误,在Java12中的大多数包中都会重复出现,但在Java8中效果良好。 我已尝试将所有jar文件从模块路径移动到类路径。模块路径中只有Java 12库。我在Java版本的软件包中寻找任何不推荐的东西。我用不同的Java版本尝试了3种不同的系统(都运行OS-X10.13.6、10.13

  • 我已经研究了好几天了,似乎所有的答案都是特定于Eclipse的。我在Visual Studio Code上遇到此错误: 这将出现在包含导入。 使用: Java 11.0.4 Gradle构建时没有问题,因此错误消息表示终端和VSCode之间存在某种断开连接。 到目前为止,我已经: 确保和匹配 任何帮助都将不胜感激,谢谢您的时间! 我知道这个问题,但一直没有答案。