Optaplanner: java.lang.NoSuchMethodError: com.google.common.collect.MapMaker.makeComputingMap

问题描述 投票:1回答:1
@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类上,我有办法解决这个问题吗?

drools guava optaplanner
1个回答
0
投票

升级OptaPlanner(也升级Drools)到最新版本,使用guava 25.0。

© www.soinside.com 2019 - 2024. All rights reserved.