2012-12-17 11 views
8

Używam Spring 3.2 z konfiguracją Java i mam problemy z testami jednostkowymi (JUnit 4.8.1). Więc jest to zawodnik testowy:Testowanie urządzenia w wersji sprężynowej 3.2 z konfiguracją opartą na Javie

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

Howeever, otrzymuję ten błąd:

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) 

Jak Spring blog stanach, Wiosna 3.2 inline CGLIB 3. Więc dlaczego ten błąd?

Używam programu Gradle 1.3 jako narzędzia do zarządzania kompilacją i STS jako IDE. Dzwoniąc gradle eclipse Gradle ciągnie w zależności dwukrotnie: raz jako zwykły słoik i raz jako Biblioteka:

Najpierw jako zwykły słoik: plain jar

a nie jak Biblioteka:

library

W dziale słoiki miałem skonfigurowany Spring 3.1, natomiast w dziale bibliotecznym była wiosna 3.2. Więc usunąłem zwykłe słoiki i wszystko działało.

To jest mój projekt 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/" 
     } 
    } 
} 

A build.gradle z projektu głównego

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

Czy możesz opublikować treść ścieżki klas? lub pom.xml, jeśli używasz maven? – ElderMael

+0

Czy kończy się niepowodzeniem zarówno w środowisku Eclipse, jak i w linii poleceń gradle? – artbristol

+0

Tylko w Eclipse (STS). – ChrLipp

Odpowiedz

2

Usunąłem wszystkie projekty i ustawienia Eclipse i wszystkie pliki tymczasowe Gradle. Następnie próbowałem zaimportować projekt w Eclipse (Import Gradle project ..). To nie powiodło się z wyjątkiem. Następnie usunąłem ustawienia Gradle w projekcie Eclipse, a następnie import działał.

Więc nie będę używać gradle eclipse z wersją 1.3.

Również dodatkowa ścieżka zestawu źródeł nie trafiła do projektu Eclipse jako ścieżka źródłowa.

1

Miałem ten sam problem. Wystarczy dodać tę zależność do pliku pom.xml:

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

i Twoich testów jednostkowych i kod wykonawcze powinny działać poprawnie, bez błędów cglib.

+0

Przeprowadziłem migrację projektu z Mavena na Gradle i, co zaskakujące, użyta wersja zależności wiosna-kontekst była inna: 3.1.x zamiast oczekiwanego 4.x. Wyjaśnia to wyjątek, ponieważ Spring wprowadza CGLib od 3.2, ale nie wcześniej. Po dodaniu powyższej zależności błąd zniknął.Szkoda, że ​​gradle jeszcze nie obsługuje zakresu importu Mavena. W przeciwnym razie można również użyć BOM (zestawienie materiałów). – rwitzel

Powiązane problemy