Очень простой пример конфигурации Apache-commons выдает NoClassDefFoundError

Я пытаюсь протестировать очень простой пример с учетом в руководстве пользователя библиотеки конфигурации Apache-commons относительно объявления и создания bean-компонентов. Я скопировал код из примера почти слово в слово, но все равно получаю исключение NoClassDefFoundError.

Вот XML-файл, который я использую — windowcongif.xml:

<?xml version="1.0" encoding="ISO-8859-1" ?>
<config>
  <gui>
    <windowManager config-class="test.DefaultWindowManager"
      closable="false" resizable="true" defaultWidth="400"
      defaultHeight="250">      
    </windowManager>
  </gui>
</config>

Вот код в файле WindowManager.java:

package test;
public interface WindowManager {}

Вот код в файле DefaultWindowManager.java:

package test;
public class DefaultWindowManager  implements WindowManager {
    private boolean resizable;
    private boolean closable;
    private int defaultWidth;
    private int defaultHeight;
}

Вот код в файле Main.java:

package test;
import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.configuration.XMLConfiguration;
import org.apache.commons.configuration.beanutils.BeanDeclaration;
import org.apache.commons.configuration.beanutils.BeanHelper;
import org.apache.commons.configuration.beanutils.XMLBeanDeclaration;

public class Main {
    public static void main(String[] args) throws ConfigurationException {
        XMLConfiguration config = new XMLConfiguration("windowconfig.xml");
        BeanDeclaration decl = new XMLBeanDeclaration(config, "gui.windowManager");
        WindowManager wm = (WindowManager) BeanHelper.createBean(decl);
    }
}

Вот вывод во время выполнения:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/beanutils/PropertyUtils
    at org.apache.commons.configuration.beanutils.BeanHelper.initProperty(BeanHelper.java:269)
    at org.apache.commons.configuration.beanutils.BeanHelper.initBeanProperties(BeanHelper.java:229)
    at org.apache.commons.configuration.beanutils.BeanHelper.initBean(BeanHelper.java:166)
    at org.apache.commons.configuration.beanutils.DefaultBeanFactory.initBeanInstance(DefaultBeanFactory.java:108)
    at org.apache.commons.configuration.beanutils.DefaultBeanFactory.createBean(DefaultBeanFactory.java:64)
    at org.apache.commons.configuration.beanutils.BeanHelper.createBean(BeanHelper.java:336)
    at org.apache.commons.configuration.beanutils.BeanHelper.createBean(BeanHelper.java:358)
    at org.apache.commons.configuration.beanutils.BeanHelper.createBean(BeanHelper.java:372)
    at test.Main.main(Main.java:23)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.beanutils.PropertyUtils
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
    ... 9 more

Как заставить работать этот простой пример?

Я использую версию 1.9 пакета commons-configuration, автоматически импортируемого IntelliJ IDEA после помещения зависимости в файл pom.xml, и версию 1.7.0_17 java, работающую в 64-разрядной версии Windows 8.


person Joe    schedule 28.04.2013    source источник


Ответы (2)


Импортируйте org.apache.commons.beanutils.PropertyUtils в свой класс.

person aran    schedule 28.04.2013
comment
Вы абсолютно правы, извините за это. Я разместил новый вопрос здесь: stackoverflow.com/q/16266523/566639 - person Joe; 28.04.2013
comment
@AdamArold Это действительно решило проблему для пользователя еще в 2013 году. Вы можете сказать, глядя на принятый ответ. У пользователя уже была зависимость от pom.xml, поэтому ответ ниже моего (от 2017 года) — это то, что он уже сделал, ему просто нужно было сделать импорт. Вы можете взглянуть на его комментарий и следующий вопрос, чтобы увидеть, что он решил проблему только с помощью предложения IMPORT. Пожалуйста. - person aran; 17.04.2018

У меня была такая же проблема, я добавил эту зависимость:

<dependency>
    <groupId>commons-beanutils</groupId>
    <artifactId>commons-beanutils</artifactId>
    <version>1.9.3</version>
</dependency>
person Jean-Daniel Gamache    schedule 17.03.2017
comment
Очевидно, это правильный ответ. Динамические зависимости приведены здесь: commons.apache.org/proper/commons-configuration/ - person cquezel; 11.04.2017
comment
Обратите внимание, что это группа commons-beanutils, а не org.apache.commons, как во многих других библиотеках Apache Commons. - person jamesthollowell; 11.08.2017
comment
Это исправило это для меня, спасибо Жан. Как указал cquezel, существует целая куча зависимостей runtime. Таким образом, ваш проект будет отлично компилироваться и выдавать исключения при поиске beanutils или любых зависимостей времени выполнения, которые вам понадобятся. - person SomeGuy; 25.04.2018
comment
Но разве Apache Commons не должен сделать beanutils зависимостью в Maven? Это именно та проблема зависимости, для решения которой используется инструмент сборки, не так ли? - person flow2k; 07.09.2018