2016-11-26 4 views
0

У меня есть следующий код.Spring 4.2 ApplicationContext NoClassDefFound Ошибка

// MessagePrinter.java 
public class MessagePrinter { 
    private String message; 
    public MessagePrinter(String input){ 
     message = input; 
    } 
} 

// ApplicationConfig.java 
@Configuration 
public class ApplicationConfig { 

    @Bean 
    public MessagePrinter getMessagePrinter(){ 
     return new MessagePrinter("Bean"); 
    } 
} 

// Application.java 
public class Application { 
    public static void main(String[] args) {  
     ApplicationContext context = new AnnotationConfigApplicationContext(ApplicationConfig.class); 
    } 
} 

Я получаю ошибку при запуске приложения в Eclipse, является java.lang.NoClassDefFoundError. Я нахожусь в процессе перехода от cplusplus к java и совершенно нового в Spring Framework. Вся документация, которую я читаю в Интернете, говорит мне, что этот код должен работать нормально. Моя цель - извлечь класс MessagePrinter из ApplicationContext, который создается в основном. Однако первый оператор сам вызывает сбой кода. Любые подсказки? Я абсолютный Java noob. Поэтому не стесняйтесь указывать на наиболее очевидные.

Я использую Spring 4.2.7

Действительное сообщение об ошибке от Eclipse, приводится ниже.

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory 
at org.springframework.context.support.AbstractApplicationContext.<init>(AbstractApplicationContext.java:159) 
at org.springframework.context.support.GenericApplicationContext.<init>(GenericApplicationContext.java:102) 
at org.springframework.context.annotation.AnnotationConfigApplicationContext.<init>(AnnotationConfigApplicationContext.java:60) 
at org.springframework.context.annotation.AnnotationConfigApplicationContext.<init>(AnnotationConfigApplicationContext.java:82) 
at hello.Application.main(Application.java:8) 
Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory 
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) 
... 5 more 
+0

вы добавили необходимые пружинные связанные банки в пути к классам? –

+0

Я добавил весной 4.2.7 банок в качестве внешних банок в пути сборки для свойств проекта eclipse. Это то, что вы имеете в виду? Я не копировал банки в локальную папку. – cplusplusrat

+0

Я не знаю, какие все весенние банки вы используете. 'AnnotationConfigApplicationContext' находится в контейнере весеннего контекста. –

ответ

1

Вам не хватает commons-logging.jar в вашем пути к классу. Этот сосуд требуется пружинным сердечником.

Если ваш проект является проектом Maven добавить к вашей pom.xml в разделе зависимостей

<!-- https://mvnrepository.com/artifact/commons-logging/commons-logging --> 
<dependency> 
    <groupId>commons-logging</groupId> 
    <artifactId>commons-logging</artifactId> 
    <!-- change version as applicable --> 
    <version>1.2</version> 
</dependency> 

Вы можете вручную добавить банки в Eclipse. Скачать банки с

https://mvnrepository.com/artifact/commons-logging/commons-logging/1.2

+0

ОК, я создал проект с помощью мастера в Eclipse. Подозреваю, что это не проект maven (я не знаю, что такое maven). Я попытаюсь вручную добавить банку. Был ли какой-либо логический путь от ошибки, чтобы выяснить недостающую банку? – cplusplusrat

+0

Ваш вопрос действительный, и это меня раздражало, когда я начал с java (не то, что я эксперт сейчас). Но в целом, когда вы знакомы с инструментами вокруг java, они начинают использовать такие инструменты, как Maven/Gradle, для настройки проектов и разрешения зависимостей. Maven автоматически загрузил бы учетную запись и добавил бы ее в classpath. Не волнуйтесь, что эта начальная борьба поможет вам в долгосрочной перспективе. Я обвиняю учебник, за которым вы следовали (если бы он не упоминал добавление необходимых банок). Теперь добавьте банки вручную, а затем повторите попытку. :) –

+0

Извините за поздний отклик. Но да, я сделал это, добавив еще несколько внешних банок. Commons-logging определенно был необходим, но это не решило проблему полностью. Мне пришлось добавить еще несколько, но в конце концов это сработало. Это указывало мне в правильном направлении. Благодарю. – cplusplusrat

Смежные вопросы