下面是我的情况的简要介绍:
我有两个Java项目:一个是Java8(所以不是模块化的),另一个是Java11的模块化项目。
模块化/非模块化的问题可能不相关,但为了清楚起见,我已经说明了这一点。
作为参考,Java 8是我制作的游戏库,Java 11是我正在制作的游戏实现。
我需要从我的Java 11游戏项目中引用Java 8库。
这两个项目都是Maven项目,我在游戏的POM文件中定义了我的依赖项。
我使用的是最新版本的Eclipse (2020-03 4.15.0)和Maven3.6.3以及Java version11.0.7 OracleJDK。
我的问题是:
我的理解是,我的Java 8库项目变成了一个自动模块。将其添加到我的Java 11游戏项目module-info文件中可以正常工作(出现名称不稳定的警告,但没有问题),并且我可以在Eclipse中编译游戏项目代码而不会出现任何问题。
当我尝试运行游戏时,我得到了Module <my-library> not found, required by <my-game>。现在,由于Maven正在管理依赖项,它应该可以正常工作。
如何让我的游戏运行?
发布于 2020-04-16 11:41:57
我可以用三种方法解决它。
首先,我可以简单地手动将库项目的JAR文件(在它的目标文件夹中)添加到我的游戏项目的运行配置模块路径中。
其次,我可以从我的工作区中删除库项目。这意味着Maven随后会从本地的m2存储库(与mvn install一起安装)获取JAR。在这种情况下,Maven会自动正确地将JAR添加到运行配置模块路径中。
第三,我可以在库项目的POM文件中更改库项目的版本,就像选项2一样,这意味着它不再满足依赖项,然后Maven会在本地m2存储库中查找JAR。
但是..。
在我看来,这三个选项都应该是不必要的。这感觉就像是Maven未能将工作空间中的项目依赖项添加到Eclipse的Run配置中的模块路径的bug。
公平地说,它是一个Maven Eclipse插件特性,可以自动检测工作区中的某个项目是依赖项,并使用该“活动”版本而不是m2存储库版本。对于在库上并行开发的情况,这是非常方便的。
但是直到这个bug被修复(或者除非它不是一个bug,我遗漏了什么),这让我非常沮丧。我发布这篇文章的目的是希望能帮助其他可能面临同样问题的人。
https://stackoverflow.com/questions/61242311
复制相似问题