drools - Optaplanner:java.lang.NoSuchMethodError:com.google.common.collect.MapMaker.makeComputingMap
问题描述
@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)
我正在使用 makeComputingMap 方法不附带的 Maven guava 23.0 库。切换到较旧的 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 的最新版本。
推荐阅读
- python - 如何使用 python 在 azure 函数中的 httpTrigger 中创建调度程序?
- node.js - 谷歌浏览器更新的 SameSite cookie 问题
- swift - RxSwift 清理序列
- node.js - 无法查看授权标头
- javascript - JavaScript:将条件条件作为值传递
- python - 试图从一个函数调用一个变量到另一个函数
- android - 无法在 Jetpack Compose 中创建按钮
- python - Python Logging - 在启动时移动文件
- symfony - Symfony - Doctrine - 无法在 Oracle 数据库中存储 blob 文件
- gatsby - 特定类别帖子的 Gatsbyjs 分页错误