1

我试图使用apache commons 配置并遇到一个引发 NoClassDefFoundError 的问题。它发生在Parameters.xml()调用上。下面是我的 IntelliJ 生成的完整代码和异常详细信息。我正在使用 jdk1.8.0_91。我感谢任何帮助解决这个问题。

import org.apache.commons.configuration2.*;
import org.apache.commons.configuration2.ex.*;
import org.apache.commons.configuration2.builder.*;
import org.apache.commons.configuration2.builder.fluent.*;

public class TestDBA {

    public static void main(String[] args)
    {
        try {
            Parameters params = new Parameters();
            FileBasedConfigurationBuilder<XMLConfiguration> builder = new FileBasedConfigurationBuilder<XMLConfiguration>(XMLConfiguration.class);
            XMLBuilderParameters px = params.xml();
            builder.configure(px.setFileName("myconfig.xml"));
            XMLConfiguration config = builder.getConfiguration();
            System.out.println(config.toString());
        } catch (ConfigurationException cex) {
            // loading of the configuration file failed
            System.out.println("some error occurred");
        }
    }
}

异常详情:

线程“main”中的异常 java.lang.NoClassDefFoundError: org/apache/commons/beanutils/DynaBean at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:264) at com .sun.proxy.$Proxy0.(Unknown Source) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 在 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。在 Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 TestDBA.main(TestDBA.java:16) 的 Parameters.xml(Parameters.java:232) .reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144 ) 引起:java.lang.ClassNotFoundException: org.apache.commons.beanutils.DynaBean at java.net.URLClassLoader.findClass(URLClassLoader.java:381) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ... 还有 16 个232) 在 TestDBA.main(TestDBA.java:16) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl .java:43) at java.lang.reflect.Method.invoke(Method.java:498) at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144) 原因:java.lang。 ClassNotFoundException: org.apache.commons.beanutils.DynaBean at java.net.URLClassLoader.findClass(URLClassLoader.java:381) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at sun.misc.Launcher$AppClassLoader。 loadClass(Launcher.java:331) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ... 16 更多232) 在 TestDBA.main(TestDBA.java:16) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl .java:43) at java.lang.reflect.Method.invoke(Method.java:498) at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144) 原因:java.lang。 ClassNotFoundException: org.apache.commons.beanutils.DynaBean at java.net.URLClassLoader.findClass(URLClassLoader.java:381) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at sun.misc.Launcher$AppClassLoader。 loadClass(Launcher.java:331) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ... 16 更多NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method. java:498) 在 com.intellij.rt.execution.application.AppMain.main(AppMain.java:144) 引起:java.lang.ClassNotFoundException: org.apache.commons.beanutils.DynaBean 在 java.net.URLClassLoader。 findClass(URLClassLoader.java:381) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) at java.lang.ClassLoader.loadClass(ClassLoader .java:357) ... 还有 16 个NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method. java:498) 在 com.intellij.rt.execution.application.AppMain.main(AppMain.java:144) 引起:java.lang.ClassNotFoundException: org.apache.commons.beanutils.DynaBean 在 java.net.URLClassLoader。 findClass(URLClassLoader.java:381) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) at java.lang.ClassLoader.loadClass(ClassLoader .java:357) ... 还有 16 个62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:498) 在 com.intellij.rt.execution.application.AppMain.main(AppMain .java:144) 引起:java.lang.ClassLoader.loadClass(ClassLoader.java) 的 java.net.URLClassLoader.findClass(URLClassLoader.java:381) 的 java.lang.ClassNotFoundException: org.apache.commons.beanutils.DynaBean :424) 在 sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:357) ... 还有 16 个62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:498) 在 com.intellij.rt.execution.application.AppMain.main(AppMain .java:144) 引起:java.lang.ClassLoader.loadClass(ClassLoader.java) 的 java.net.URLClassLoader.findClass(URLClassLoader.java:381) 的 java.lang.ClassNotFoundException: org.apache.commons.beanutils.DynaBean :424) 在 sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:357) ... 还有 16 个ClassNotFoundException: org.apache.commons.beanutils.DynaBean at java.net.URLClassLoader.findClass(URLClassLoader.java:381) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at sun.misc.Launcher$AppClassLoader。 loadClass(Launcher.java:331) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ... 16 更多ClassNotFoundException: org.apache.commons.beanutils.DynaBean at java.net.URLClassLoader.findClass(URLClassLoader.java:381) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at sun.misc.Launcher$AppClassLoader。 loadClass(Launcher.java:331) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ... 16 更多

进程以退出代码 1 结束

4

2 回答 2

3

commons-configurations取决于commons-beanutils 缺失类 ( org/apache/commons/beanutils/DynaBean) 的定义位置。

您的运行时类路径中可能缺少所需的 JAR。有关构建过程的其他信息可能有助于进一步调查问题(构建路径上的内容、类路径上的内容等......)。

于 2016-06-22T11:05:57.797 回答
0

这就是我设法解决此问题的方法。首先,我将 commons-beanutil 添加到我的 pom.xml 文件中:

<!-- Apache Commons Configuration -->
<dependency>
    <groupId>commons-beanutils</groupId>
    <artifactId>commons-beanutils</artifactId>
    <version>1.9.3</version> <!-- Add the latest version of BeanUtils here. -->
</dependency>

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-configuration2</artifactId>
    <version>2.0</version> <!-- Add the latest version of Apache Commons Configuration2 here. -->
</dependency>

<!-- Add any additional dependencies here. -->

然后我将 Apache BeanUtils 和 Apache Commons Configuration 复制到我的类路径中(在我的例子中是 lib)。

下载网址:

  • BeanUtils:https : //mvnrepository.com/artifact/commons-beanutils/commons-beanutils/1.9.3(用最新版本的 BeanUtils 替换 1.9.3)。
  • Apache Commons Configuration2(假设您使用的是 Commons Configuration 2):https ://mvnrepository.com/artifact/org.apache.commons/commons-configuration2/2.0 (用最新版本的 Apache Commons Configuration 替换 2.0)。
于 2017-04-07T00:47:41.313 回答