【问题标题】:ClassNotFoundException when trying to add configuration to a CompositeConfiguration using commons-configuration2尝试使用 commons-configuration2 将配置添加到 CompositeConfiguration 时出现 ClassNotFoundException
【发布时间】:2018-09-26 06:13:31
【问题描述】:

我正在使用org.apache.commons:commons-configuration2 来加载和合并来自不同来源的配置:

val root = CompositeConfiguration()
root.addConfiguration(SystemConfiguration())

val configurations = Configurations()


root.addConfiguration(configurations.properties("defaults.properties"))

我的问题是,每当我运行此代码时,都会出现异常:

线程“主”java.lang.NoClassDefFoundError 中的异常: org/apache/commons/beanutils/BeanIntrospector 在 java.lang.Class.forName0(本机方法)在 java.lang.Class.forName(Class.java:264) 在 com.sun.proxy.$Proxy0.(Unknown Source) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 在 java.lang.reflect.Constructor.newInstance(Constructor.java:423) 在 java.lang.reflect.Proxy.newProxyInstance(Proxy.java:739) 在 org.apache.commons.configuration2.builder.fluent.Parameters.createParametersProxy(Parameters.java:294) 在 org.apache.commons.configuration2.builder.fluent.Parameters.fileBased(Parameters.java:185) 在 org.apache.commons.configuration2.builder.fluent.Configurations.fileParams(Configurations.java:602) 在 org.apache.commons.configuration2.builder.fluent.Configurations.fileParams(Configurations.java:638) 在 org.apache.commons.configuration2.builder.fluent.Configurations.fileBasedBuilder(Configurations.java:164) 在 org.apache.commons.configuration2.builder.fluent.Configurations.propertiesBuilder(Configurations.java:264) 在 org.apache.commons.configuration2.builder.fluent.Configurations.properties(Configurations.java:318) 在 io.sspinc.datahub.sparkapp.MainKt.main(main.kt:18) 引起: java.lang.ClassNotFoundException: org.apache.commons.beanutils.BeanIntrospector 在 java.net.URLClassLoader.findClass(URLClassLoader.java:381) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:424) 在 sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:338) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:357)

它说没有找到org.apache.commons.beanutils.BeanIntrospector。如果我将 commons-beanutils:commons-beanutils:1.9.3 添加到类路径,问题就解决了,但主要问题是 我在托管环境 (Databricks) 中使用 Apache Spark 2.3.0 并且它带有 commons-beanutils:1.7.0 所以我对 beanutils 版本无能为力。

我该如何解决这个问题?

【问题讨论】:

  • 当你将commons-beanutils:commons-beanutils:1.7.0 添加到类路径时会发生什么?
  • 同样的错误。在文档中 config2 说它只适用于1.9.3 或更高版本。如果我改用commons-configurations:1.10,则不会出现异常。
  • 你能明确排除commons-beanutils:commons-beanutils:1.7.0吗?

标签: java apache-spark apache-commons databricks


【解决方案1】:

如果您只想要复合配置功能表单commons-configuration,您可能想尝试使用commons-configuration:commons-configuration:1.10。它的工作原理是这样的:

val root = CompositeConfiguration()
root.addConfiguration(SystemConfiguration())

root.addConfiguration(PropertiesConfiguration("defaults.properties"))

根据their documentation,配置 2 不能与 1.7.0 bean utils 一起使用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-16
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    • 2012-04-20
    相关资源
    最近更新 更多