CGLIB требуется для обработки классов @Configuration

Am, используя Spring 3.1. Война не построена с использованием Maven. Это просто нормальная сборка. У меня ниже jars в моем пути класса.

antlr-runtime-3.0.1.jar
commons-logging-1.1.1.jar
org.apache.commons.logging.jar
org.springframework.aop-3.1.0.M2.jar
org.springframework.asm-3.1.0.M2.jar
org.springframework.aspects-3.1.0.M2.jar
org.springframework.beans-3.1.0.M2.jar
org.springframework.context-3.1.0.M2.jar
org.springframework.context.support-3.1.0.M2.jar
org.springframework.core-3.1.0.M2.jar
org.springframework.core-3.1.0.RELEASE.jar
org.springframework.core.jar
org.springframework.expression-3.1.0.M2.jar
spring-beans-3.0.5.RELEASE.jar
spring-context-3.0.5.RELEASE.jar

У меня ниже кода,

@Configuration
public class AppConfig {

    @Bean(name="helloBean")
    public HelloWorld helloWorld()
    {
        return new HelloWorldImpl();
    }
}

Когда я запускаю метод main, я получаю ниже исключения

Exception in thread "main" java.lang.IllegalStateException: CGLIB is required to process @Configuration classes. Either add CGLIB to the classpath or remove the following @Configuration bean definitions: [appConfig]
at org.springframework.context.annotation.ConfigurationClassPostProcessor.enhanceConfigurationClasses(ConfigurationClassPostProcessor.java:297)
at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigurationClasses(ConfigurationClassPostProcessor.java:200)

Чтобы преодолеть это, если я добавлю cglib-2.1.jar, я получаю ниже исключения.

java.lang.ClassNotFoundException: org.objectweb.asm.Type

Чтобы преодолеть это, если я добавлю asm3.1.jar, я получаю ниже исключения.

java.lang.NoSuchMethodError: org.objectweb.asm.ClassWriter.

Как я могу преодолеть свое первоначальное исключение - CGLIB is required to process @Configuration classes ?

Ответ 1

Война не построена с использованием Maven. Его просто нормальная конструкция

В вашей проблеме точно указано, почему вы должны использовать Maven (или другой подобный инструмент зависимостей) - поздравление с изучением вещей с трудом. Библиотеки в мире Java часто имеют очень сложное дерево зависимостей, и Maven может помочь решить все это для вас.

В вашем случае, если бы вы использовали maven, вам просто нужно включить зависимость cglib, и вся его транзитивная зависимость (включая asm) будет разрешена для вас.

<dependency>
    <groupId>cglib</groupId>
    <artifactId>cglib</artifactId>
    <version>3.0</version>
</dependency>

Ответ 2

Начиная с Spring 3.2, больше не требуется, чтобы добавить cglib как явную зависимость.

Ссылка: http://www.baeldung.com/2011/10/20/bootstraping-a-web-application-with-spring-3-1-and-java-based-configuration-part-1/#cglib_gone

Этот ответ для тех, кто задавался вопросом, почему их проект работает нормально без cglib, и приходите на эту страницу, ища информацию о cglib как мне.

Ответ 3

Библиотека CGLIB требуется в вашей программе. Вы можете использовать Maven для загрузки зависимостей.

by xml, как опубликовано gerrytan, т.е.

<dependency>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
<version>3.0</version>
</dependency>

Если вы не используете maven (или другой инструмент зависимостей), вы можете загрузить библиотеку из CGLIB HomePage.

Ответ 4

Используйте cglib-2.2.jar и asm-3.3.jar и добавьте его в classpath