我想使用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 required (自动)模块中>的示例。我认识到以下几点:
当我关闭工作区中除 example 以外的所有Eclipse项目时,所有(非模块化)依赖项.jars都将从模块路径中的.m2存储库中正确地包含为自动模块,而我 example 项目运行正常。我可以通过查看运行配置>参数>显示命令行来验证这一点。
相反,当我在工作区中也打开具有依赖项的项目时,依赖项没有包含在模块路径中,因此 example 项目不会运行(导致< em>在引导层初始化期间发生错误,java.lang.module.FindException:模块my_dependency_1,...未找到,示例必需。)。
我的问题是:如果我想打开它们并与之一起使用,是否需要将所有 my_dependencies_1,... 从非模块化依赖项转换为模块化依赖项?我在工作区中的模块化 example 项目,或者是否有任何选项可以让我继续使用非模块化依赖项目?我正在寻找一个简单而干净的解决方案,而不是在手动添加一些时髦的东西到启动参数上的“黑客”。如果无法做到这一点,我宁愿花一些时间将每个依赖项转换为模块化的依赖项,其缺点是在仍为Java 8编写的其他项目中不再可用。
感谢您的澄清:)
这是演示的基本示例:
pom.xml (来自项目 example )
<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 (属于项目 example )
package example;
import mydependency.MyDependency;
public class Example {
public static void main(String[] args) {
MyDependency.run();
}
}
module-info.java (来自项目 example )
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
如果打开了项目,则运行时的命令行(缺少独立性的目标/类):
C:\me\jdk-11.0.1\bin\javaw.exe
-Dfile.encoding=UTF-8
-p "C:\me\workspace\example\target\classes"
-m example/example.Example
答案 0 :(得分:1)
源项目不可能是自动模块,因为自动模块的名称是从jar文件名派生的。
您需要的是:
mvn install
Maven > Disable Workspace Resolution
在依赖自动模块(“程序包资源管理器”中的上下文菜单)的每个项目上编辑: