0

我的源代码有测试和一些测试支持代码,以及通常的源代码。我希望能够将源代码和测试支持作为单独的工件(每个都有自己的一组依赖项)发布,但显然不是测试类。

我的目录结构如下所示:

src/main/...
src/test/...
src/testsupport/...

像往常一样,我定义了一些依赖项:

dependencies {
    compile 'com.sun.jersey:jersey-core:1.17.1'
    ... more compile dependencies...
    testCompile 'com.google.code.gson:gson:2.1'
    ... more testCompile dependencies...
}

我还需要测试支持sourceSet:

sourceSets {
    testSupport {
        java {
            srcDir 'src/testsupport/java'
        }
        resources {
            srcDir 'src/testsupport/resources'
        }
        compileClasspath += sourceSets.test.compileClasspath
        runtimeClasspath += sourceSets.test.runtimeClasspath
    }
}

我必须将测试类路径添加到 testSupport 中,因为 testsupport 代码具有相同的依赖项。

最后,要创建我的工件,我有:

task createTestSupportArtifact (type: Jar) {
    classifier = 'testsupport'
    from sourceSets.testSupport.output
}

artifacts {
    archives file: createTestSupportArtifact.archivePath, builtBy: createTestSupportArtifact
}

但是,在我依赖这些工件的其他存储库中,它没有为 testsupport 工件引入任何依赖项。我有一些关于为什么的理论(它没有自己的 POM 或者它不知道范围是在运行时测试),但没有具体的。

有更好的方法吗?也许configurations聪明地使用?

4

1 回答 1

0

认为您想extendsFrom在 testSupport 配置上使用。我没有创建一组测试项目,但如果你的代码正常工作但你的部门不工作,那么你的配置有问题,而不是 sourceSets,这是合乎逻辑的。

当您声明一个新的 sourceSet 时,您会根据配置名称自动获得两个新配置,在您的情况下:testSupportCompiletestSupportRuntime. 尝试以下操作将您的正常测试部门与您的 testSupport 部门联系起来。

configurations {
    testSupportCompile.extendsFrom testCompile
    testSupportRuntime.extendsFrom testRuntime
}

Gradle 在发布时肯定会使用配置,我猜由于您没有明确地向您的 testSupportXYZ 配置添加任何内容,因此当您以后需要支持工件时,它决定没有要解决的依赖关系。上面的代码应该以与链接源代码相同的方式链接您的部门,并希望能解决您的问题。

于 2013-06-19T19:20:21.867 回答