gpt4 book ai didi

java - 打开项目时在 Eclipse 2018-12 中找不到自动模块

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:31:32 25 4
gpt4 key购买 nike

我想使用 Eclipse 2018-12 从 Oracle JDK 8 切换到 Open JDK 11。我有以下情况:

在我的 Eclipse 工作区中,我有一个名为 example 的主 maven 项目,其中包含一些 maven 依赖项 my_dependency_1、my_dependency_2,它们也是同一工作区中的 maven 项目。目前,只有 example 是模块化的(因此包含 module-info.java)。其他项目是非模块化的,包含在 pom.xml 以及 module-info.java 中的必需(自动)模块中> 示例。我认识到以下几点:

当我关闭工作区中除example 之外的所有 Eclipse 项目时,所有(非模块化)依赖项 .jars 都会作为自动模块从 .m2 存储库正确包含在模块路径中,而我的示例 项目运行良好。我可以通过查看 Run Configurations > Arguments > Show Command Line 来验证这一点。

相比之下,当我在我的工作区中打开带有我的依赖项的项目时,依赖项不会包含在模块路径中,因此 example 项目不会运行(导致 < em>启动层初始化时出错,java.lang.module.FindException: Module my_dependency_1, ... not found, required by example).

我的问题是:如果我想打开并使用它们,是否需要将所有 my_dependencies_1, ... 从非模块化依赖项转换为模块化依赖项我的工作区中的模块化 example 项目,或者是否有任何选项可以让我继续使用非模块化依赖项项目?我正在寻找一个简单而干净的解决方案,而不是通过手动将时髦的东西附加到启动参数来“破解”。如果这不可能,我宁愿花一些时间将每个依赖项转换为模块化的依赖项,其缺点是在仍然为 Java 8 编写的其他项目中不再可用。

感谢您的澄清:)

这是一个基本的演示示例:

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.example</groupId>
<artifactId>example</artifactId>
<version>1.0-SNAPSHOT</version>

<dependencies>
<dependency>
<groupId>com.example</groupId>
<artifactId>mydependency</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
</project>

Example.java(项目示例)

package example;
import mydependency.MyDependency;

public class Example {
public static void main(String[] args) {
MyDependency.run();
}
}

module-info.java(项目示例)

open module example {
requires mydependency;
}

pom.xml(项目mydependency)

<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.example</groupId>
<artifactId>mydependency</artifactId>
<version>1.0-SNAPSHOT</version>
</project>

MyDependency.java(属于 mydependency 项目)

package mydependency;
public class MyDependency {
public static void run() {
System.out.println("run");
}
}

项目关闭时运行时的命令行(正常工作):

C:\me\jdk-11.0.1\bin\javaw.exe
-Dfile.encoding=UTF-8
-p "C:\me\workspace\example\target\classes;C:\me\.m2\repository\com\example\mydependency\1.0-SNAPSHOT\mydependency-1.0-SNAPSHOT.jar"
-m example/example.Example

如果项目打开时运行时的命令行(缺少 mydependency 的目标/类):

C:\me\jdk-11.0.1\bin\javaw.exe
-Dfile.encoding=UTF-8
-p "C:\me\workspace\example\target\classes"
-m example/example.Example

最佳答案

源项目不可能是自动模块,因为自动模块的名称是从 jar 文件名派生的。

你需要的是:

  • mvn install 在每个依赖项中
  • Maven > 在每个依赖自动模块的项目上禁用工作区解析(Package Explorer 中的上下文菜单)

编辑:

  • 或者,可以关闭所有包含自动模块的项目,而不是禁用工作区解析。
  • 受此影响的人可能会成为冠军 Eclipse Bug 543925 ,其中 m2e 和 JDT 之间的合作可以超出 JPMS 指定的范围:m2e 可以告诉 JDT 什么是自动模块名称,如果给定的项目被访问从它的 jar 文件。然后,在后台运行该程序将需要忽略工作区解析,以便 JVM 找到所需的 jar 文件。

关于java - 打开项目时在 Eclipse 2018-12 中找不到自动模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54195765/

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