尝试设置PropertiesConfiguration时获取NoClassDefFoundError

时间:2017-06-28 12:24:27

标签: java noclassdeffounderror

我正在尝试设置FileBasedConfigurationBuilder,以便我可以使用PropertiesConfiguration,但我得到NoClassDefFoundError。 这是我的代码

public class Config {
  private static Properties properties;
  private static PropertiesConfiguration config;

  public static void setUp(String path) throws ConfigurationException, IOException {
    if (config == null) {
      FileBasedConfigurationBuilder<PropertiesConfiguration> builder =
          new FileBasedConfigurationBuilder<PropertiesConfiguration>(PropertiesConfiguration.class)
          .configure(new Parameters().properties()
              .setFileName("myConfig.properties")
              .setThrowExceptionOnMissing(true)
              .setListDelimiterHandler(new DefaultListDelimiterHandler(','))
              .setIncludesAllowed(false));

      config = builder.getConfiguration();

      File file = new File(path);
      FileReader reader = new FileReader(file);
      config.read(reader);
    }
  }
}

堆栈跟踪:

java.lang.NoClassDefFoundError: org/apache/commons/beanutils/BeanIntrospector
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Unknown Source)
    at com.sun.proxy.$Proxy38.<clinit>(Unknown Source)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at java.lang.reflect.Proxy.newProxyInstance(Unknown Source)
    at org.apache.commons.configuration2.builder.fluent.Parameters.createParametersProxy(Parameters.java:294)
    at org.apache.commons.configuration2.builder.fluent.Parameters.properties(Parameters.java:245)

2 个答案:

答案 0 :(得分:2)

您似乎错过了类路径(BeanIntrospector)中的apache commons bean utils jar(其中包含commons-beanutils类),请务必添加它以解决问题。

您可以从maven存储库中下载jar:https://mvnrepository.com/artifact/commons-beanutils/commons-beanutils

答案 1 :(得分:0)

你得到一个java.lang.NoClassDefFoundError,这并不意味着你的类缺失(在这种情况下,你得到一个java.lang.ClassNotFoundException)。在尝试读取类时,ClassLoader在读取类定义时遇到错误。

在静态初始值设定项中放置一个try / catch并查看异常。如果您在那里阅读了一些文件并且它与您的本地环境不同,则很可能是问题的原因(可能无法找到文件,没有权限等)。