2013-08-14 12 views
12

Sto usando Spring 3.1. La guerra non viene costruita usando Maven. È solo una build normale. Ho sotto i barattoli nel mio percorso di classe.CGLIB è necessario per elaborare le classi @Configuration

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 

ho seguito il codice,

@Configuration 
public class AppConfig { 

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

Quando eseguo main metodo, sto ottenendo sotto eccezione

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) 

Per ovviare a questo, se aggiungo cglib-2.1.jar, che ottiene sotto eccezione.

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

Per superare questo, se aggiungo asm3.1.jar, sto ottenendo sotto eccezione.

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

Come posso vincere la mia eccezione iniziale - CGLIB is required to process @Configuration classes ?

+0

Forse un duplicato di http://stackoverflow.com/questions/2432471/error-java-lang-nosuchmethoderror-org-objectweb-asm-classwriter-initiv –

risposta

10

La guerra non è costruito utilizzando Maven. È solo una build normale

Il tuo problema evidenzia esattamente il motivo per cui dovresti usare Maven (o altro strumento di dipendenza simile) - congratulazioni per l'apprendimento delle cose nel modo più difficile. Le librerie nel mondo Java hanno spesso un albero delle dipendenze molto complesso e Maven può aiutarti a risolverlo tutto per te.

Nel tuo caso, ha avuto si è utilizzato Maven è sufficiente includere la dipendenza cglib e tutta la sua dipendenza transitiva (compresa asm) sarà risolto per voi

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

Grazie ... Ma non è possibile risolvere questo senza passare a Maven? Pochi URL sono bloccati dalla mia azienda e quando ho provato a costruire usando Maven, c'era un timeout della connessione .. – user2488578

+0

L'altro modo per risolvere questo è che devi risolvere manualmente tutte le dipendenze transitive di cglib (e tutte le altre librerie di terze parti che decidi di usare) e includerle nel tuo classpath. Maven central search engine: http://search.maven.org può aiutarti - da lì puoi cercare quali dipendenze di un particolare artefatto. Nota: Maven è un'infrastruttura ampiamente utilizzata in un ambiente aziendale. Le aziende di maggiori dimensioni hanno spesso il proprio mirror del repository centrale (vedere Nexus). Ti suggerisco caldamente di persuadere il tuo amministratore di rete ad abilitare Maven – gerrytan

+0

Dovrebbe essere indipendente lavorare senza usare Maven. Maven non dovrebbe essere un requisito. – Tastybrownies

2

biblioteca CGLIB è richiesto nel programma. Puoi usare Maven per scaricare la dipendenza.

di xml, come pubblicato da gerrytan ie.

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

Se non si utilizza Maven (o altro strumento di dipendenza), è possibile scaricare la libreria da CGLIB HomePage.

1

Usa cglib-2.2.jar e ASM-3.3.jar e aggiungerlo al percorso di classe

Problemi correlati