8

我正在使用带有基于 Java 的配置的 Spring 3.2,并且我的单元测试(JUnit 4.8.1)存在一些问题。所以这是一个测试运行器:

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

但是,我收到此错误:

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)

正如Spring 博客所述,Spring 3.2 正在内联 CGLIB 3。那么为什么我会收到此错误?

我使用 Gradle 1.3 作为构建管理工具,使用 STS 作为 IDE。调用gradle eclipsegradle 时会两次引入依赖项:一次作为普通 jar,一次作为库:

首先是普通的罐子: 普通罐子

而不是作为图书馆:

图书馆

在普通的 jar 部分我仍然配置了 Spring 3.1,而在库部分有 Spring 3.2。所以我移除了普通的罐子,一切正常。

这是我的项目 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/"
        }
    }
}

以及来自主项目的 build.gradle

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
    {
    }
}
4

2 回答 2

2

我删除了所有 Eclipse 项目和设置以及所有 Gradle 临时文件。然后我尝试在 Eclipse 中导入项目(导入 Gradle 项目..)。这失败了一个例外。然后我删除了 Eclipse 项目中的 Gradle 设置,然后导入工作。

所以我不会使用gradle eclipse1.3 版。

此外,附加的源集路径也没有作为源路径进入 Eclipse 项目。

于 2012-12-24T12:21:17.163 回答
1

我遇到过同样的问题。只需将此依赖项添加到您的 pom.xml 文件中:

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

并且您的单元测试和运行时代码应该可以正常工作而不会出现 cglib 错误。

于 2013-02-15T23:17:54.727 回答