运行 模块路径上的 OptaPlanner
Running OptaPlanner on the module path
我想在模块路径上创建我的 OptaPlanner 项目运行。
我根据文档中的云平衡演示创建了一个示例存储库 (mwkroening/optaplanner-modulepath-example)。
示例项目在类路径上 运行 运行良好,但是在尝试使其 运行 在模块路径上时存在一个我无法解决的问题。您可以在 PR #1.
中看到目前的进度
solverConfig.xml 中指定的 scoreDrl 加载失败,出现以下异常:
Exception in thread "main" java.lang.IllegalArgumentException: The scoreDrl (io/github/mwkroening/optaplannermodulepathexample/cloudBalancingScoreRules.drl) does not exist as a classpath resource in the classLoader (jdk.internal.loader.ClassLoaders$AppClassLoader@7c16905e).
at org.optaplanner.core@7.18.0.Final/org.optaplanner.core.config.score.director.ScoreDirectorFactoryConfig.buildDroolsScoreDirectorFactory(ScoreDirectorFactoryConfig.java:519)
at org.optaplanner.core@7.18.0.Final/org.optaplanner.core.config.score.director.ScoreDirectorFactoryConfig.buildScoreDirectorFactory(ScoreDirectorFactoryConfig.java:351)
at org.optaplanner.core@7.18.0.Final/org.optaplanner.core.config.solver.SolverConfig.buildSolver(SolverConfig.java:255)
at org.optaplanner.core@7.18.0.Final/org.optaplanner.core.impl.solver.AbstractSolverFactory.buildSolver(AbstractSolverFactory.java:61)
at io.github.mwkroening.optaplannermodulepathexample/io.github.mwkroening.optaplannermodulepathexample.App.main(App.java:14)
我之前调用SolverFactory.createFromXmlResource时遇到过类似的异常。
我解决这个问题的方法是调用:
SolverFactory.createFromXmlInputStream(
App.class.getResourceAsStream("cloudBalancingSolverConfig.xml"));
我查看了 PLANNER-883 and psiroky/optaplanner-cloudbalancing-jdk9,但我认为在那种情况下使用了类路径资源,而不是模块路径中的资源。
我该如何解决这个问题?
也许我应该打开一个问题而不是在这里发布这个,对吗?
每个 SolverFactory.createFrom*(...)
都有一个接受 classloader 的重载方法:SolverFactory.createFrom*(..., classloader)
。 class 加载程序不仅用于加载 XML 资源,还用于加载 DRL 资源。
所以尝试:
SolverFactory.createFromXmlResource("/.../cloudBalancingSolverConfig.xml",
App.class.getClassLoader())
我自己还没有测试过,但如果它有效,我很乐意看到它添加到 the "jigsaw" section in the manual(欢迎 PR :)。
我想在模块路径上创建我的 OptaPlanner 项目运行。
我根据文档中的云平衡演示创建了一个示例存储库 (mwkroening/optaplanner-modulepath-example)。
示例项目在类路径上 运行 运行良好,但是在尝试使其 运行 在模块路径上时存在一个我无法解决的问题。您可以在 PR #1.
中看到目前的进度solverConfig.xml 中指定的 scoreDrl 加载失败,出现以下异常:
Exception in thread "main" java.lang.IllegalArgumentException: The scoreDrl (io/github/mwkroening/optaplannermodulepathexample/cloudBalancingScoreRules.drl) does not exist as a classpath resource in the classLoader (jdk.internal.loader.ClassLoaders$AppClassLoader@7c16905e).
at org.optaplanner.core@7.18.0.Final/org.optaplanner.core.config.score.director.ScoreDirectorFactoryConfig.buildDroolsScoreDirectorFactory(ScoreDirectorFactoryConfig.java:519)
at org.optaplanner.core@7.18.0.Final/org.optaplanner.core.config.score.director.ScoreDirectorFactoryConfig.buildScoreDirectorFactory(ScoreDirectorFactoryConfig.java:351)
at org.optaplanner.core@7.18.0.Final/org.optaplanner.core.config.solver.SolverConfig.buildSolver(SolverConfig.java:255)
at org.optaplanner.core@7.18.0.Final/org.optaplanner.core.impl.solver.AbstractSolverFactory.buildSolver(AbstractSolverFactory.java:61)
at io.github.mwkroening.optaplannermodulepathexample/io.github.mwkroening.optaplannermodulepathexample.App.main(App.java:14)
我之前调用SolverFactory.createFromXmlResource时遇到过类似的异常。 我解决这个问题的方法是调用:
SolverFactory.createFromXmlInputStream(
App.class.getResourceAsStream("cloudBalancingSolverConfig.xml"));
我查看了 PLANNER-883 and psiroky/optaplanner-cloudbalancing-jdk9,但我认为在那种情况下使用了类路径资源,而不是模块路径中的资源。
我该如何解决这个问题? 也许我应该打开一个问题而不是在这里发布这个,对吗?
每个 SolverFactory.createFrom*(...)
都有一个接受 classloader 的重载方法:SolverFactory.createFrom*(..., classloader)
。 class 加载程序不仅用于加载 XML 资源,还用于加载 DRL 资源。
所以尝试:
SolverFactory.createFromXmlResource("/.../cloudBalancingSolverConfig.xml",
App.class.getClassLoader())
我自己还没有测试过,但如果它有效,我很乐意看到它添加到 the "jigsaw" section in the manual(欢迎 PR :)。