加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-15 02:11:05 所属栏目:Java 来源:网络整理
导读:我至少维护了2个 Java Gradle项目.假设我有一个名为A的公共项目和另一个依赖于A的项目B.在许多其他项目中,A在技术上是常见的,但这不是我问题的细节.无论如何,目前的情况是B在其build.gradle文件中声明对A的依赖是一个普通的外部依赖,如下所示: compile grou
我至少维护了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 gradle和Multi-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',version: '0.1')
testCompile(group: 'com.example',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',version: '0.1')
    testCompile(group: 'com.example',name: 'A-test-support',version: '0.1')
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读