OptaPlanner:配置XML映射不正确,并且依赖关系未解决(slf4j)

问题描述 投票:0回答:2

我应该将此堆栈跟踪作为两个单独的问题来阅读吗?似乎我没有映射slf4j依赖关系?我为什么要这样做?那不是从另一个项目(OptaPlanner)继承的吗?我正在与OptaPlanner合作,并尝试对CloudBalancing项目进行修改。当我运行该应用程序时,我得到以下信息:

SLF4J:无法加载类“ org.slf4j.impl.StaticLoggerBinder”。SLF4J:默认为无操作(NOP)记录器实现SLF4J:详见http://www.slf4j.org/codes.html#StaticLoggerBinder细节。线程“主”中的异常java.lang.IllegalArgumentException:SolverConfigResource(scheduleConfig.xml)作为类路径不存在classLoader中的资源(jdk.internal.loader.ClassLoaders$AppClassLoader@42a57993)。在org.optaplanner.core.config.solver.SolverConfig.createFromXmlResource(SolverConfig.java:110)在org.optaplanner.core.config.solver.SolverConfig.createFromXmlResource(SolverConfig.java:87)在org.optaplanner.core.api.solver.SolverFactory.createFromXmlResource(SolverFactory.java:65)在com.eddiefiggie.schedulelogic.App.main(App.java:10)

除了报告的slf4j问题,似乎我的scheduleConfig.xml映射不正确?我遵循了文档,并认为我还可以。也许正在向我的“绿色” java思想解释所报告的错误。


编辑依据:

将我的POM修改为包括:

    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
      <version>1.7.30</version>
    </dependency>
    <dependency>
      <groupId>ch.qos.logback</groupId>
      <artifactId>logback-classic</artifactId>
      <version>1.2.3</version>
      <scope>runtime</scope>
    </dependency>

也将我的xml配置放在正确的资源路径中。

现在我得到了这个堆栈:

SLF4J:无法加载类“ org.slf4j.impl.StaticLoggerBinder”。 SLF4J:默认为无操作(NOP)记录器实现SLF4J:详见http://www.slf4j.org/codes.html#StaticLoggerBinder细节。警告:发生了非法的反射访问操作警告:非法的反射访问com.thoughtworks.xstream.core.util.Fields(文件:/home/eddiefiggie/.m2/repository/com/thoughtworks/xstream/xstream/1.4.11.1/xstream-1.4.11.1.jar)字段java.util.TreeMap.comparator警告:请考虑向维护者报告com.thoughtworks.xstream.core.util.Fields警告:使用--illegal-access =警告启用进一步的非法反射访问操作的警告警告:所有非法访问操作都将在将来的版本中被拒绝线程“ main”中的异常java.lang.IllegalArgumentException:解组第8行上的resolverConfigResource(scheduleConfig.xml)失败。行号(8)上的类名可能被空格包围,这是无效的。在org.optaplanner.core.config.solver.SolverConfig.createFromXmlResource(SolverConfig.java:117)在org.optaplanner.core.config.solver.SolverConfig.createFromXmlResource(SolverConfig.java:87)在org.optaplanner.core.api.solver.SolverFactory.createFromXmlResource(SolverFactory.java:65)在com.eddiefiggie.schedulelogic.App.main(App.java:10)上,由于:com.thoughtworks.xstream.converters.ConversionException:无法加载java类ScheduleEasyScoreCalculator----调试信息----消息:无法加载Java类ScheduleEasyScoreCalculator类:java.lang.Class required-type:java.lang.Class转换器类型:com.thoughtworks.xstream.converters.SingleValueConverterWrapper包裹转换器:com.thoughtworks.xstream.converters.extended.JavaClassConverter行编号:8类[1]:org.optaplanner.core.config.score.director.ScoreDirectorFactoryConfigrequired-type [1]:org.optaplanner.core.config.score.director.ScoreDirectorFactoryConfig转换器类型[1]:com.thoughtworks.xstream.converters.reflection.ReflectionConverterclass [2]:org.optaplanner.core.config.solver.SolverConfigrequired-type [2]:org.optaplanner.core.config.solver.SolverConfig版本:1.4.11.1------------------------------- com.thoughtworks.xstream.converters.extended.JavaClassConverter.fromString(JavaClassConverter.java: 71)在com.thoughtworks.xstream.converters.SingleValueConverterWrapper.fromString(SingleValueConverterWrapper.java:41)在com.thoughtworks.xstream.converters.SingleValueConverterWrapper.unmarshal(SingleValueConverterWrapper.java:49)在com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:72)在com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:66)在com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:66)在com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.unmarshallField(AbstractReflectionConverter.java:499)在com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.doUnmarshal(AbstractReflectionConverter.java:425)在com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.unmarshal(AbstractReflectionConverter.java:277)在com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:72)在com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:72)在com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:66)在com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.unmarshallField(AbstractReflectionConverter.java:499)在com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.doUnmarshal(AbstractReflectionConverter.java:425)在com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.unmarshal(AbstractReflectionConverter.java:277)在com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:72)在com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:72)在com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:66)在com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:50)在com.thoughtworks.xstream.core.TreeUnmarshaller.start(TreeUnmarshaller.java:134)在com.thoughtworks.xstream.core.AbstractTreeMarshallingStrategy.unmarshal(AbstractTreeMarshallingStrategy.java:32)在com.thoughtworks.xstream.XStream.unmarshal(XStream.java:1487)处com.thoughtworks.xstream.XStream.unmarshal(XStream.java:1467)在com.thoughtworks.xstream.XStream.fromXML(XStream.java:1338)位于org.optaplanner.core.config.solver.SolverConfig.createFromXmlReader(SolverConfig.java:202)在org.optaplanner.core.config.solver.SolverConfig.createFromXmlInputStream(SolverConfig.java:176)在org.optaplanner.core.config.solver.SolverConfig.createFromXmlResource(SolverConfig.java:112)

xml maven intellij-idea optaplanner
2个回答
1
投票

[solverConfigResource(scheduleConfig.xml)作为classLoader中的类路径资源不存在

这意味着src/main/resources/scheduleConfig.xml处没有文件。

通常,您的求解器配置XML是带名称空间的,因此调用类似createFromXmlResource("org/foo/bar/scheduleConfig.xml")的名称以在src/main/resources/org/foo/bar/scheduleConfig.xml"处查找它。


1
投票

要修复slf4j警告,请在您的pom中添加经典的logback:

<!-- Logging -->
<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-api</artifactId>
</dependency>
<dependency>
  <groupId>ch.qos.logback</groupId>
  <artifactId>logback-classic</artifactId>
  <scope>runtime</scope>
</dependency>

slf4j只是一个API。它需要一个实现,通常是logback,它是同级项目。

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