@Test
public void test_whenDroolsSolver(){
SolverFactory<CourseSchedule> solverFactory =
SolverFactory.createFromXmlResource("courseScheduleSolverConfigDrools.xml");
Solver<CourseSchedule> solver = solverFactory.buildSolver();
CourseSchedule solvedCourseSchedule = solver.solve(unsolvedCourseSchedule);
Assertions.assertNotNull(solvedCourseSchedule.getScore());
Assertions.assertEquals(0, solvedCourseSchedule.getScore().getHardScore());
}
我正在运行上述Optaplanner应用程序的单元测试,但遇到了以下错误。
java.lang.NoSuchMethodError: com.google.common.collect.MapMaker.makeComputingMap(Lcom/google/common/base/Function;)Ljava/util/concurrent/ConcurrentMap;
at com.google.inject.internal.Annotations$AnnotationChecker.<init>(Annotations.java:104)
at com.google.inject.internal.Annotations.<clinit>(Annotations.java:122)
at com.google.inject.Key.ensureRetainedAtRuntime(Key.java:362)
at com.google.inject.Key.strategyFor(Key.java:354)
at com.google.inject.Key.get(Key.java:222)
at org.eclipse.sisu.wire.ParameterKeys.<clinit>(ParameterKeys.java:28)
at org.eclipse.sisu.wire.DependencyAnalyzer.<init>(DependencyAnalyzer.java:92)
at org.eclipse.sisu.wire.ElementAnalyzer.<init>(ElementAnalyzer.java:87)
at org.eclipse.sisu.wire.WireModule.configure(WireModule.java:74)
at com.google.inject.spi.Elements$RecordingBinder.install(Elements.java:229)
at com.google.inject.spi.Elements.getElements(Elements.java:103)
at com.google.inject.internal.InjectorShell$Builder.build(InjectorShell.java:136)
at com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:104)
at com.google.inject.Guice.createInjector(Guice.java:94)
at com.google.inject.Guice.createInjector(Guice.java:71)
at com.google.inject.Guice.createInjector(Guice.java:61)
at org.codehaus.plexus.DefaultPlexusContainer.addPlexusInjector(DefaultPlexusContainer.java:477)
at org.codehaus.plexus.DefaultPlexusContainer.<init>(DefaultPlexusContainer.java:203)
at org.codehaus.plexus.DefaultPlexusContainer.<init>(DefaultPlexusContainer.java:167)
at org.kie.scanner.embedder.MavenEmbedderUtils.buildPlexusContainer(MavenEmbedderUtils.java:136)
at org.kie.scanner.embedder.MavenEmbedderUtils.buildPlexusContainer(MavenEmbedderUtils.java:110)
at org.kie.scanner.embedder.MavenEmbedder.<init>(MavenEmbedder.java:88)
at org.kie.scanner.embedder.MavenEmbedder.<init>(MavenEmbedder.java:115)
at org.kie.scanner.embedder.MavenProjectLoader.parseMavenPom(MavenProjectLoader.java:41)
at org.kie.scanner.embedder.MavenProjectLoader.parseMavenPom(MavenProjectLoader.java:35)
at org.kie.scanner.MavenPomModelGenerator.parse(MavenPomModelGenerator.java:19)
at org.drools.compiler.kproject.xml.PomModel$Parser.parse(PomModel.java:64)
at org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildPomModel(KieBuilderImpl.java:422)
at org.drools.compiler.kie.builder.impl.KieBuilderImpl.init(KieBuilderImpl.java:112)
at org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildAll(KieBuilderImpl.java:154)
at org.optaplanner.core.config.score.director.ScoreDirectorFactoryConfig.buildDroolsScoreDirectorFactory(ScoreDirectorFactoryConfig.java:682)
at org.optaplanner.core.config.score.director.ScoreDirectorFactoryConfig.buildScoreDirectorFactory(ScoreDirectorFactoryConfig.java:463)
at org.optaplanner.core.config.solver.SolverConfig.buildScoreDirectorFactory(SolverConfig.java:606)
at org.optaplanner.core.config.solver.SolverConfig.buildSolver(SolverConfig.java:514)
at org.optaplanner.core.impl.solver.DefaultSolverFactory.buildSolver(DefaultSolverFactory.java:49)
at OptaPlannerUnitTest.test_whenDroolsSolver(OptaPlannerUnitTest.java:48)
我运行的是Maven guava 23.0库,它没有makeComputingMap方法。切换到旧版guava 13.0可以解决这个问题,但又出现了另一个缺失的方法。
java.lang.NoSuchMethodError: com.google.common.collect.Sets$SetView.iterator()Lcom/google/common/collect/UnmodifiableIterator;
buildSolver类org.optaplanner.core.impl.solver.DefaultSolverFactory.buildSolver似乎运行在一些出现在旧版本和新版本的guava类上,我有办法解决这个问题吗?
升级OptaPlanner(也升级Drools)到最新版本,使用guava 25.0。