2012-12-17 21 views
8

Sto utilizzando Spring 3.2 con la configurazione basata su Java e ho alcuni problemi con i miei test di unità (JUnit 4.8.1). Quindi questo è un test runner:Test di Spring 3.2 unit con configurazione basata su Java

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(classes={TestConfig.class}) 
public class ManualTest 
{ 
    @Autowired 
    ... 

Howeever, sto ricevendo questo errore:

Caused by: java.lang.IllegalStateException: CGLIB is required to process @Configuration classes. Either add CGLIB to the classpath or remove the following @Configuration bean definitions: [testConfig] 
at org.springframework.context.annotation.ConfigurationClassPostProcessor.enhanceConfigurationClasses(ConfigurationClassPostProcessor.java:327) 
at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanFactory(ConfigurationClassPostProcessor.java:222) 

quanto Spring blog Uniti, Spring 3.2 è inlining CGLIB 3. Allora, perché ricevo questo errore?

Sto usando Gradle 1.3 come strumento di gestione build e STS come IDE. Quando si chiama gradle eclipse Gradle tira dentro le dipendenze per due volte: una volta come vaso semplice e una volta come libreria:

Prima come vaso semplice: plain jar

e che come libreria:

library

Nella sezione jar normale avevo ancora configurato Spring 3.1, mentre nella sezione library c'era Spring 3.2. Così ho rimosso i vasetti semplici e tutto funzionava.

questo è il mio progetto build.gradle

configurations 
{ 
    driver 
} 

dependencies 
{ 
    driver 'com.oracle:ojdbc6:11.2.0' 

    compile "org.springframework:spring-jdbc:$springVersion" 

    testCompile 'com.oracle:ojdbc6:11.2.0' 
    testCompile "org.springframework:spring-test:$springVersion" 
    testCompile "commons-dbcp:commons-dbcp:$dbcpVersion" 
    testCompile "junit:junit:$junitVersion" 
    testCompile "org.slf4j:slf4j-log4j12:$slf4jVersion" 
} 

sourceSets 
{ 
    main 
    { 
     java 
     { 
      srcDirs 'src/main/java', "$buildDir/generated-sources/" 
     } 
    } 
} 

E la build.gradle dal progetto principale

configure(allprojects) 
{ 
    ext.dbcpVersion = '1.4' 
    ext.springVersion = '3.2.0.RELEASE' 
    ext.junitVersion = '4.8.1' 
    ext.slf4jVersion = '1.7.2' 
} 

subprojects 
{ 
    // Artifact settings 
    group = 'xxx' 
    version = '1.0-SNAPSHOT' 

    // Standard plugins 
    apply plugin: 'java' 
    apply plugin: 'eclipse' 

    // Repositories 
    repositories 
    { 
     mavenLocal() 
     maven 
     { 
      url "http://repo.springsource.org/release" 
     } 
     mavenCentral() 
    } 

    // Standard dependencies 
    dependencies 
    { 
    } 
} 
+0

È possibile pubblicare i contenuti del classpath? o pom.xml se si utilizza Maven? – ElderMael

+0

Fallisce sia in Eclipse che nella riga di comando gradle? – artbristol

+0

Solo in Eclipse (STS). – ChrLipp

risposta

2

ho cancellato tutti i progetti e le impostazioni di Eclipse e tutti i file temporanei Gradle. Quindi ho provato ad importare il progetto in Eclipse (Import Gradle project ..). Questo ha fallito con un'eccezione. Quindi ho cancellato le impostazioni di Gradle all'interno del progetto Eclipse e successivamente l'importazione ha funzionato.

Quindi non userò gradle eclipse con la versione 1.3.

Anche il percorso del set di origine aggiuntivo non si è inserito nel progetto Eclipse come percorso di origine.

1

Ho avuto lo stesso problema. Basta aggiungere questa dipendenza al file pom.xml:

<dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-context</artifactId> 
     <version>${spring.version}</version> 
    </dependency> 

E il test di unità e di codice runtime dovrebbe funzionare correttamente senza errori CGLIB.

+0

Ho migrato un progetto da Maven a Gradle e, sorprendentemente, la versione utilizzata della dipendenza del contesto di primavera era diversa: 3.1.x invece del previsto 4.x. Questo ha spiegato l'eccezione perché la Spring è in linea con CGLib dal 3.2 ma non prima. Dopo aver aggiunto la dipendenza di cui sopra l'errore è scomparso.È un peccato che gradle non supporti ancora l'ambito di importazione di Maven. Altrimenti si potrebbe usare anche la distinta base (distinta materiali). – rwitzel

Problemi correlati