微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java – 依赖于同一Gradle依赖项目的main和test代码

我至少维护了2个Java Gradle项目.假设我有一个名为A的公共项目和另一个依赖于A的项目B.在许多其他项目中,A在技术上是常见的,但这不是我问题的细节.无论如何,目前的情况是B在其build.gradle文件中声明对A的依赖是一个普通的外部依赖,如下所示:

compile group:'com.example', name: 'A', version: '0.1'

我们有一个特定于A中测试的代码,我们通过将它放在src / main / java中与B共享.此代码必须保留在A而不是B中,因为还有其他项目取决于使用此测试代码的A.我想避免将代码在这个目录中,因为它没有专门用于生产的目的,因为它只具有测试性质.此外,简单地将代码从A移动到B是不可能的,因为我组织中的其他项目依赖于相同的代码,我希望避免代码重复.我宁愿将A中的测试代码移动到src / test / java,但是它不会发布到A的JAR文件中.

因此,我试图寻求一种解决方案,其中此代码位于A中的src / test / java中,并部署在仅测试的JAR文件中.有些帖子讨论了可能的解决方案,例如this blog post或SOF帖子,如Multi-project test dependencies with gradleMulti-project test dependencies with gradle.但是,我不断遇到一个问题,因为我没有维护多项目Gradle构建,而是两个完全独立的单个-project Gradle构建,这不能改变.

我现在所处的位置是我正在以博客文章中建议的确切方式为A配置build.gradle,如下所示:

configurations {
    testOutput.extendsFrom testCompile
}

task jarTest (type: Jar, dependsOn: testClasses) {
    from sourceSets.test.output
    classifier = 'test'
}

artifacts {
    testOutput jarTest
}

然后我在A的build.gradle中声明为编译和testCompile依赖项:

compile(group: 'com.example', name: 'A', version: '0.1')
testCompile(group: 'com.example', name: 'A', version: '0.1', configuration: 'testOutput')

这不起作用.我没有在B的测试类路径中看到任何testCompile依赖项;这些testCompile依赖项不是由gradle依赖项报告的,也不是由我的IDE代码搜索(IntelliJ)识别的.我抛出了一个Hail Mary,甚至尝试用分类器替换配置:’testOutput’:’test’,但无济于事. Gradle文档似乎也没有帮助,因为我的用例似乎并未真正涵盖在他们的预期用例中.

我可以用任何方式实现我想要的Gradle用法,或者我在A的主JAR文件中导出仅测试代码?所有人都非常感谢.

解决方法:

我会将测试期间仅需要的代码与仅在测试期间使用的库完全相同(例如JUnit或Mockito):代码应该位于具有自己名称的单独模块中.

所以我建议你将A分成两个模块(相同的多项目构建):

> A.
> A测试支持

A的依赖关系必须改为:

dependencies {
    testCompile project(':A-test-support')
}

在B中,您必须使用这些依赖项:

dependencies {
    compile(group: 'com.example', name: 'A', version: '0.1')
    testCompile(group: 'com.example', name: 'A-test-support', version: '0.1')
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐