Java 在模块路径上运行OptaPlanner

Java 在模块路径上运行OptaPlanner,java,gradle,java-9,optaplanner,java-module,Java,Gradle,Java 9,Optaplanner,Java Module,我想让我的OptaPlanner项目在模块路径上运行 我根据文档中的云平衡演示创建了一个示例存储库() 示例项目在类路径上运行良好,但在尝试使其在模块路径上运行时,有一个问题我无法解决。你可以看到迄今为止在公关方面的进展 中指定的scoreDrl无法加载,出现以下异常: 线程“main”java.lang.IllegalArgumentException中的异常:scoreDrl(io/github/Mwkroning/OptaPlannerModulePatheExample/cloudBal

我想让我的OptaPlanner项目在模块路径上运行

我根据文档中的云平衡演示创建了一个示例存储库()

示例项目在类路径上运行良好,但在尝试使其在模块路径上运行时,有一个问题我无法解决。你可以看到迄今为止在公关方面的进展

中指定的scoreDrl无法加载,出现以下异常:

线程“main”java.lang.IllegalArgumentException中的异常:scoreDrl(io/github/Mwkroning/OptaPlannerModulePatheExample/cloudBalancingScoreRules.drl)在类加载器(jdk.internal.loader.classLoader)中不作为类路径资源存在$AppClassLoader@7c16905e).
在org.optaplanner。core@7.18.0.Final/org.optaplanner.core.config.score.director.ScoreDirectorFactoryConfig.buildDroolsScoreDirectorFactory(ScoreDirectorFactoryConfig.java:519)
在org.optaplanner。core@7.18.0.Final/org.optaplanner.core.config.score.director.ScoreDirectorFactoryConfig.buildScoreDirectorFactory(ScoreDirectorFactoryConfig.java:351)
在org.optaplanner。core@7.18.0.Final/org.optaplanner.core.config.solver.SolverConfig.buildSolver(SolverConfig.java:255)
在org.optaplanner。core@7.18.0.Final/org.optaplanner.core.impl.solver.AbstractSolverFactory.buildSolver(AbstractSolverFactory.java:61)
位于io.github.mwkroning.optaplannermodulepaethexample/io.github.mwkroning.optaplannermodulepaethexample.App.main(App.java:14)
我以前打电话时也遇到过类似的例外情况。 我解决该问题的方法是:

SolverFactory.createFromXmlInputStream(
App.class.getResourceAsStream(“cloudBalancingSolverConfig.xml”);
我查看了和,但我认为在这种情况下使用了类路径资源,而不是模块路径上的资源

我如何解决这个问题?
也许我应该打开一个问题而不是在这里发布,对吗?

每个接受类加载器的
SolverFactory.createFrom*(…)
都有一个重载方法:
SolverFactory.createFrom*(…,classloader)
。该类加载器不仅用于加载XML资源,还用于加载DRL资源

因此,请尝试:

SolverFactory.createFromXmlResource("/.../cloudBalancingSolverConfig.xml",
    App.class.getClassLoader())

我自己还没有测试过这个,但如果它有效的话,我希望看到它被添加到(公关欢迎:)。

非常有趣的实验。请看我的实验。谢谢你的回答!我必须在
module info.java
中打开包,然后添加
--add opens=java.base/java.lang=org.drools.core
。现在甚至不需要提供类加载器。但有一件事让我感到困扰,那就是我找不到必须打开包的模块。所以现在它的
打开[…]
,但我真的希望像这样的东西打开[…]到org.optaplanner.core。这样我就不会被迫向所有人开放我的包裹。我尝试了所有我能想到的模块名称,但没有找到一个。