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