Как исправить ошибку DRL и kmodule.xml - PullRequest
0 голосов
/ 21 июня 2019

Я хотел бы встроить optaplanner 7.23.0. Наконец, в мой проект, чтобы решить проблему оптимизации путем небольшой модификации одного из этих примеров. Я могу запустить все примеры, без проблем запустив основные классы из IntelliJ вручную. На следующем шаге я попытался вызвать такой неизмененный пример основного класса из моего реального проекта. Здесь загружаются некоторые службы kie.conf, и я запускаю ошибку DRL, которую не могу устранить. Смотрите журнал и ошибку ниже.

Я предполагаю, что файл .drl не содержит ошибок, потому что пример запускается при запуске вручную.

Я также предполагаю, что все ссылки в конфигах решателя заданы правильно, потому что изменение немедленно приводит к ошибке.

В некоторых примерах существуют методы «EasyScore» в дополнение к методам «Score DRL». Ошибка относится окончательно к баллу DRL, поскольку при изменении метода вычисления баллов на один из методов «EasyScore» оптимизация выполняется без ошибок. Однако я бы предпочел DRL, потому что он быстрее и уже доступен для моего желаемого примера.

Кажется, ошибка связана с файлом "kmodule.xml". К сожалению, у меня нет такого файла, но, похоже, он не нужен для решения примеров.

Я попытался реализовать все возможные зависимости "optaplanner", "drools" и "kie" в моем файле pom, но ошибка все еще существует.

В моем проекте я просто пытался вызвать optaplanner с помощью этого основного метода:

  public static void main(String[] args) {
        org.optaplanner.examples.nqueens.app.NQueensHelloWorld.main(args);
  }

Ошибка возникает при построении решателя в основном методе NQueensHelloWorld-Example:

 SolverFactory<NQueens> solverFactory = SolverFactory.createFromXmlResource(
                "org/optaplanner/examples/nqueens/solver/nqueensSolverConfig.xml");
        Solver<NQueens> solver = solverFactory.buildSolver();

Журнал и ошибка:

2019-06-21 11:50:28,951 INFO  ServiceDiscoveryImpl.java:105 - Loading kie.conf from  jar:file:/C:/Users/s2932/.m2/repository/org/optaplanner/optaplanner-core/7.23.0.Final/optaplanner-core-7.23.0.Final.jar!/META-INF/kie.conf in classloader sun.misc.Launcher$AppClassLoader@18b4aac2
2019-06-21 11:50:28,953 INFO  ServiceDiscoveryImpl.java:139 - Adding Service +org.optaplanner.core.impl.solver.kie.KieSolverAssemblerService

2019-06-21 11:50:28,953 INFO  ServiceDiscoveryImpl.java:105 - Loading kie.conf from  jar:file:/C:/Users/s2932/.m2/repository/org/drools/drools-decisiontables/7.23.0.Final/drools-decisiontables-7.23.0.Final.jar!/META-INF/kie.conf in classloader sun.misc.Launcher$AppClassLoader@18b4aac2
2019-06-21 11:50:28,954 INFO  ServiceDiscoveryImpl.java:139 - Adding Service org.drools.decisiontable.DecisionTableProviderImpl

2019-06-21 11:50:28,955 INFO  ServiceDiscoveryImpl.java:105 - Loading kie.conf from  jar:file:/C:/Users/s2932/.m2/repository/org/drools/drools-compiler/7.23.0.Final/drools-compiler-7.23.0.Final.jar!/META-INF/kie.conf in classloader sun.misc.Launcher$AppClassLoader@18b4aac2
2019-06-21 11:50:28,960 INFO  ServiceDiscoveryImpl.java:139 - Adding Service org.drools.compiler.kie.builder.impl.KieServicesImpl

2019-06-21 11:50:28,962 INFO  ServiceDiscoveryImpl.java:139 - Adding Service org.drools.compiler.builder.impl.KnowledgeBuilderFactoryServiceImpl

2019-06-21 11:50:28,962 INFO  ServiceDiscoveryImpl.java:105 - Loading kie.conf from  jar:file:/C:/Users/s2932/.m2/repository/org/drools/drools-core/7.23.0.Final/drools-core-7.23.0.Final.jar!/META-INF/kie.conf in classloader sun.misc.Launcher$AppClassLoader@18b4aac2
2019-06-21 11:50:28,963 INFO  ServiceDiscoveryImpl.java:139 - Adding Service org.drools.core.io.impl.ResourceFactoryServiceImpl

2019-06-21 11:50:28,964 INFO  ServiceDiscoveryImpl.java:139 - Adding Service org.drools.core.marshalling.impl.MarshallerProviderImpl

2019-06-21 11:50:28,965 INFO  ServiceDiscoveryImpl.java:139 - Adding Service org.drools.core.concurrent.ExecutorProviderImpl

2019-06-21 11:50:28,965 INFO  ServiceDiscoveryImpl.java:105 - Loading kie.conf from  jar:file:/C:/Users/s2932/.m2/repository/org/kie/kie-internal/7.23.0.Final/kie-internal-7.23.0.Final.jar!/META-INF/kie.conf in classloader sun.misc.Launcher$AppClassLoader@18b4aac2
2019-06-21 11:50:28,966 INFO  ServiceDiscoveryImpl.java:139 - Adding Service org.kie.internal.services.KieAssemblersImpl

2019-06-21 11:50:28,966 INFO  ServiceDiscoveryImpl.java:139 - Adding Service org.kie.internal.services.KieRuntimesImpl

2019-06-21 11:50:28,967 INFO  ServiceDiscoveryImpl.java:139 - Adding Service org.kie.internal.services.KieWeaversImpl

2019-06-21 11:50:28,967 INFO  ServiceDiscoveryImpl.java:139 - Adding Service org.kie.internal.services.KieBeliefsImpl

Exception in thread "main" java.lang.IllegalStateException: There are errors in a score DRL:
Error Messages:
Message [id=1, level=ERROR, path=kmodule.xml, line=0, column=0
   text=kmodule.xml found, but unable to read
]
---
Warning Messages:
---
Info Messages:

    at org.optaplanner.core.config.score.director.ScoreDirectorFactoryConfig.buildDroolsScoreDirectorFactory(ScoreDirectorFactoryConfig.java:607)
    at org.optaplanner.core.config.score.director.ScoreDirectorFactoryConfig.buildScoreDirectorFactory(ScoreDirectorFactoryConfig.java:410)
    at org.optaplanner.core.config.solver.SolverConfig.buildSolver(SolverConfig.java:334)
    at org.optaplanner.core.impl.solver.AbstractSolverFactory.buildSolver(AbstractSolverFactory.java:61)
    at org.optaplanner.examples.nqueens.app.NQueensHelloWorld.main(NQueensHelloWorld.java:33)
    at main.main(main.java:13)

1 Ответ

0 голосов
/ 21 июня 2019

kmodule.xml требуется только в classpath, если вы используете альтернативы "Kiecontainer" в методах SolverFactory.create (подсказка: почти никто не делает), или если вы используете kie-server (некоторые делают это),В противном случае лучше вообще не указывать его в classpath.

...