在开发使用Maven的Java程序时,我遇到了一个问题。 到目前为止,尽管我计划将其至少分离一点,但我仍将所有内容都开发到一个模块中。 如果我通过执行主类来启动程序,则程序将按预期运行。在模块信息中指定的类的类加载器按预期工作。该模块信息是必需的,因为没有它,程序将无法运行。 当我使用需要反射访问的库时,我什至必须设置一些VM参数以允许该模块访问所需的字段。
通过“ mvn clean compile exec:java”启动程序时,模块信息似乎被忽略。如果删除它,则不会发生任何不良情况,并且程序可以正常运行。除此之外,类加载器不再能够找到之前找到的类。
我首先怀疑maven可能使用错误的Java版本执行了该程序,但是对其进行测试导致两次显示的版本都相同。
我还怀疑Maven能够读取module-info文件,因为它警告我不要将项目发布到存储库中,因为某些模块使用自动生成的模块名称。
使用maven将程序构建到.jar,然后检查生成的文件夹时,会找到两个模块信息,但都不是我为该项目编写的信息。
我在互联网上搜索了很多解决方案,但可悲的是,我只能找到“如何在Java> = 9中使用类加载器”(根据教程,我正确地做到了)和关于“ Maven with Java> = 9“,但我找不到解决方案。