gpt4 book ai didi

java - 使用 eclipse 导出模块 B 并包含另一个模块 A 时未找到模块

转载 作者:行者123 更新时间:2023-12-01 20:08:33 25 4
gpt4 key购买 nike

当导出模块项目 B 的 JAR 文件时,我在 Eclipse 中遇到问题,该文件本身包含 jar 文件中包含的另一个模块 A。在这种情况下,当我尝试导入导出的模块时,我收到 java.lang.module.FindException。

在我的示例中,项目 A 是一个模块化项目,只有一个 AClass 类:

package a;

public class AClass {
public static void main(String[] args) {
System.out.println("From module A");
}
}

项目A的模块信息是:

module modulea {
exports a;
}

项目 B 也是一个模块化项目,包括项目 A 的 Jar 文件导出。它只包含一个类 BClass:

package b;

import a.AClass;

public class BClass {
public static void main(String[] args) {
AClass.main(args);
}
}

项目B的模块信息是:

module moduleb {
requires transitive modulea;

exports b;
}

当我运行项目 B 时,我得到了预期的结果:来自模块 A

项目C也是一个模块化项目,包括导出为项目B的Jar文件。项目B的导出如下图所示:

enter image description here

B jar文件的内容如下图所示:

enter image description here

项目 C 仅包含一个类 CClass:

package c;

public class CClass {
public static void main(String[] args) {
System.out.println("ok");
}
}

项目C的模块信息是:

module modulec {
requires moduleb;
}

当我运行项目C时,出现错误:

Error occurred during initialization of boot layer
java.lang.module.FindException: Module modulea not found, required by moduleb

我认为问题出在项目C没有找到模块B所需的模块A,尽管模块A包含在项目B的jar的lib文件夹中。但我不知道如何解决此类问题。问题是:如何使用 Eclipse 将包含另一个模块 A 的模块化项目 B 导出到 jar 文件中?

eclipse :

Version: 2019-09 R (4.13.0)
Build id: 20190917-1200

JVM:

openjdk version "13-BellSoft" 2019-09-17
OpenJDK Runtime Environment (build 13-BellSoft+33)
OpenJDK 64-Bit Server VM (build 13-BellSoft+33, mixed mode, sharing)

最佳答案

在您的情况下,B.jar 包含A.jar(模块 A 加模块 B)。但是 Java 平台模块系统 (JPMS) 允许每个 JAR 只能有一个模块,而不是一个 JAR 中有多个模块。

您有以下两个选择:

  • 不将 A.jar 包含在 B.jar 中,并且在项目 C 中使用两个模块 JAR,A.jar B.jar 通过 Modulepath
  • 不使用 JPMS,方法是删除项目 C 中的 module-info.java 文件(在本例中,包括B.jar 有效;如果您不使用 jlink,那么 JPMS 的额外工作不会带来任何好处)

关于java - 使用 eclipse 导出模块 B 并包含另一个模块 A 时未找到模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58972863/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com