[英]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和psiroky / optaplanner-cloudbalancing-jdk9 ,但我認為在這種情況下使用了類路徑資源而不是模塊路徑上的資源。
我該如何解決這個問題? 也許我應該打開一個問題,而不是在這里發布,對嗎?
每個SolverFactory.createFrom*(...)
都有一個重載方法,它接受一個類加載器: SolverFactory.createFrom*(..., classloader)
。 該類加載器不僅用於加載XML資源,還用於加載DRL資源。
所以嘗試:
SolverFactory.createFromXmlResource("/.../cloudBalancingSolverConfig.xml",
App.class.getClassLoader())
我還沒有測試過這個,但如果它有效,我很樂意看到這個添加到手冊中的“拼圖”部分 (PR歡迎:)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.