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 を呼び出すと、依存関係が 2 回取り込まれます。1 回はプレーン jar として、もう 1 回はライブラリとして:

最初にプレーン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 eclipseなので、バージョン 1.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 に答える