gradle - 运行时配置中排除的实现依赖性

标签 gradle

当在我的gradle文件中将依赖项添加为实现时,作为运行时配置的一部分列出时,它们将不包括在内。例如,在尝试将它们放入路径 jar 中时,将它们排除在外,如下所示:

task pathingJar(type: Jar) {
    dependsOn configurations.runtime
    appendix = 'pathing'

    doFirst {
        manifest {
            attributes "Class-Path": configurations.runtime.files.collect {
                it.toURL().toString().replaceFirst(/file:\/+/, '/')
            }.join(' ')
        }
    }
}

但是,将它们作为编译依赖项移回时,此方法有效。现在的问题是在编译时,我的类路径要大得多。我的理解是,应将实现视为传递给直接使用者和运行时中的编译时,那么为什么将它们从该配置中排除呢?将它们指定为“api”时,这也不起作用。这是使用gradle 5.6.1。

最佳答案

runtime配置已弃用,并由runtimeOnly代替。此旧配置不了解较新的implementationapi配置,因此这就是为什么您在解决它时看不到依赖项的原因。

您想要的原因不是解析runtimeOnly配置,而是解析运行时使用的类路径。此配置称为runtimeClasspath。例:

tasks.register("patchingJar", Jar) {
    dependsOn configurations.runtimeClasspath
    appendix = 'patching'

    doFirst {
        manifest {
            attributes "Class-Path": configurations.runtimeClasspath.files.collect {
                it.toURL().toString().replaceFirst(/file:\/+/, '/')
            }.join(' ')
        }
    }
}

关于gradle - 运行时配置中排除的实现依赖性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57962922/

相关文章:

android - Android Studio始终加载支持库的旧版本

android - Gradle 获取当前构建类型

gradle - Gradle构建Spring Boot应用程序与有效配置文件进行 war

plugins - 如何在 Gradle 的 buildSrc 目录中导入多项目构建?

java - 测试中未找到 gradle、activiti 和类

android - 如何在上传之前运行单元测试任务

jenkins - SonarQube 未在 Gradle 多项目中显示 JUnit 测试的测试 Jacoco 覆盖率

android - 确保gradle依赖项在应用包中包含32位和64位库

plugins - 从自己的代码中获取自定义 Gradle 插件的版本

android - 我在Android Studio的Flutter应用程序中找不到我的项目结构,并且我也有一个build.gradle异常:((