尝试使用commons-configuration2

时间:2018-04-16 13:24:15

标签: java apache-spark apache-commons databricks

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

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

val configurations = Configurations()


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

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

  

线程“main”中的异常java.lang.NoClassDefFoundError:   org / apache / commons / beanutils / BeanIntrospector at   java.lang.Class.forName0(Native Method)at   java.lang.Class.forName(Class.java:264)at   com.sun.proxy。$ Proxy0。(未知来源)at   sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)     在   sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)     在   sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)     at java.lang.reflect.Constructor.newInstance(Constructor.java:423)     在java.lang.reflect.Proxy.newProxyInstance(Proxy.java:739)at   org.apache.commons.configuration2.builder.fluent.Parameters.createParametersProxy(Parameters.java:294)at at   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 at   java.net.URLClassLoader.findClass(URLClassLoader.java:381)at   java.lang.ClassLoader.loadClass(ClassLoader.java:424)at   sun.misc.Launcher $ AppClassLoader.loadClass(Launcher.java:338)at at   java.lang.ClassLoader.loadClass(ClassLoader.java:357)

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

我该如何解决这个问题?

1 个答案:

答案 0 :(得分: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 util。