java - gradle:切换到实现/测试实现在访问配置时导致错误

标签 java gradle intellij-idea

我有一个项目,当我使用废弃的 compiletestCompile 时,它构建得很好,但是当我将其切换到 implementation 时, testImplementation,此引用中断。

def jmockit =configurations.testCompile.files.find { it.name.contains("jmockit") }.absolutePath

它给出错误无法在空对象上获取属性“absolutePath”

当我尝试像这样改变它时

def jmockit =configurations.testImplementation.files.find { it.name.contains("jmockit") }.absolutePath

我收到错误

不允许直接解析配置“testImplementation”

根据其他相关问题,我已经尝试过

def jmockit =configurations.compileClasspath.files.find { it.name.contains("jmockit") }.absolutePath

这再次给出了Cannot get property 'absolutePath' on null object错误。

testImplementation 依赖项进入什么配置?我如何以这种方式访问​​它们?

不确定它是否相关,但这是 IntelliJ 中的一个 java 项目。

最佳答案

它会中断,因为 testCompile 不是从 testImplementation 扩展的。事实上恰恰相反。

您可以在图 3.Java 插件 - 测试源集依赖项配置中看到完整的测试配置层次结构 Dependency configurations文档。

您必须使用testCompileClasspath来检索您要查找的absolutePath。完整示例如下( Kotlin DSL ):

plugins {
    id("java")
}

repositories {
    mavenCentral()
}

group = "io.mateo.test"

dependencies {
    testImplementation("org.apache.commons:commons-lang3:3.11")
    testImplementation("org.jmockit:jmockit:1.49")
}

val jmockit = configurations.testCompileClasspath.get().files.filter { it.name.contains("jmockit") }[0]

println(jmockit.absoluteFile)

通过上述内容,您将看到您所追求的路径:

$ ./gradlew assemble

> Configure project :
C:\Users\fmate\.gradle\caches\modules-2\files-2.1\org.jmockit\jmockit\1.49\e281fc6778c43060402505f062f6515c2adeb037\jmockit-1.49.jar

BUILD SUCCESSFUL in 731ms
2 actionable tasks: 2 up-to-date

关于java - gradle:切换到实现/测试实现在访问配置时导致错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63044549/

相关文章:

java - Apache ·希罗. WebUtils.isWeb(...) 和 WebUtils.isHttp(...) 有什么区别?

java - 用于处理固定宽度文件的高效模式

maven - Gradle 构建失败 "com.google.common.util.concurrent.ExecutionError: java.lang.NoClassDefFoundError: org/gradle/api/internal/java/JavaLibrary"

gradle - 如何在构建任何发行版之前执行gradle任务

IntelliJ : could not find an output directory 中的 Scala 编译错误

java - System.out.println 不在控制台中显示文本(IntelliJ)

java - 多次调用同一个方法而不覆盖以前的值

java - 重新启动应用程序时权限拒绝 : opening provider com. android.providers.media.MediaDocumentsProvider

python - 如何从 Gradle 激活虚拟环境?

intellij-idea - PhpStorm 中的自动换行