gpt4 book ai didi

gradle - 如何在测试中使用Gradle功能变体依赖项?

转载 作者:行者123 更新时间:2023-12-03 03:39:40 27 4
gpt4 key购买 nike

我正在将Maven库项目迁移到Gradle。原始项目还具有可选的依赖项。我使用java-library plugin,但是将以前的可选依赖项移至实现时会导致运行时依赖项,而不是进行编译。因此,我尝试了gradle feature variants,它在pom.xml中产生了正确的依赖关系。但是这样做的结果是测试编译失败,因为功能变量的依赖项在测试编译类路径上丢失了!

这是我当前在build.gradle中的设置:

apply plugin: 'java'
apply plugin: 'java-library'
apply plugin: 'maven-publish'

sourceCompatibility = 1.8

java {
registerFeature('oSupport') {
usingSourceSet(sourceSets.main)
}
}

dependencies {
api 'my.compile:dep-a:1.0.0'
implementation 'my.runtime:dep-i:1.0.0'
oSupportApi 'my.optional:dep-o:1.0.0'
}

假设 O中有一个可用的类 my.optional:dep-o。如果我将 O导入 src/main/java中的任何类中,则效果很好。依赖关系也直接导出到Maven(使用 gradle generatePomFileForMavenJavaPublication,请参见下面生成的 pom.xml的依赖关系)。但是使用类 src/test/javaO中的任何测试都不会编译( import my.optional.O;创建 error: package my.optional does not exist)

<dependencies>
<dependency>
<groupId>my.compile</groupId>
<artifactId>dep-a</artifactId>
<version>1.0.0</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>my.rintime</groupId>
<artifactId>dep-r</artifactId>
<version>1.0.0</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>my.optional</groupId>
<artifactId>dep-0</artifactId>
<version>1.0.0</version>
<scope>compile</scope>
<optional>true</optional>
</dependency>
</dependencies>

如何解决呢?我知道我可以使用 nebula.optional-base插件而不是buildin Gradle功能变体,但是我更喜欢新的gradle内置对可选依赖项的支持。

PS:我使用Java 8和Gradle 5.6.2

最佳答案

当要素源集使用主源集时,这看起来像一个错误。您可以报告https://github.com/gradle/gradle/issues吗?

同时,这应该解决它:

configurations {
testCompileClasspath.extendsFrom(oSupportApi)
testRuntimeClasspath.extendsFrom(oSupportApi)
testRuntimeClasspath.extendsFrom(oSupportImplementation)
}

关于gradle - 如何在测试中使用Gradle功能变体依赖项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57988257/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com