gpt4 book ai didi

Gradle 任务与运行时依赖项混淆

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

gradle的另一个奇怪行为......

所以我找到了这个帖子:
Gradle exclude module for Copy task

完全没问题,就像一种魅力,可以将东西排除在复制之外。

但这里是有趣的地方。这是我的复制任务的外观:

task copyDependencies(type: Copy) {
into "$buildDir/libs/dependencies"
from configurations.runtime {
exclude module: 'groovy'
exclude module: 'aws-java-sdk-s3'
exclude module: 'commons-io'
}
}

如果我尝试通过 Gradles 的“应用程序运行”任务运行应用程序。 "无法找到或加载主类 xxx" 失败。深入研究这个问题,我注意到 Groovy 无法解决。

我什至不运行这个任务,或者依赖它。
但是,如果我这样注释掉第 4 行:
task copyDependencies(type: Copy) {
into "$buildDir/libs/dependencies"
from configurations.runtime {
//exclude module: 'groovy'
exclude module: 'aws-java-sdk-s3'
exclude module: 'commons-io'
}
}

应用程序正常启动,直到达到需要 Commons-IO 的程度。我仍然想在其他时候使用这个 copyDependencies 任务,但不改变那里的代码。

有人可以向我解释这种行为吗?

我想在 gradle 文件中的任何位置操作 configuration.runtime,为其他所有任务更改它?

最佳答案

在您的 from配置 block ,您正在引用 runtime配置,但同时您正在通过添加一些排除规则来更改此配置。这将改变原来的(和唯一的)runtime正如您所猜测的那样,您的构建项目中的所有其他任务都将使用该配置。这解释了您在尝试执行 run 时遇到的“找不到或加载主类 xxx”错误。任务,因为 runtime配置(类路径)不包含所需的库。

如果您想在 copyDependencies 中按组和/或模块编写排除规则任务,一种可能的方法是处理原始 runtime 的副本配置;您可以为此目的定义一个新配置:

configurations{
runtimeDeps.extendsFrom runtime
}

task copyDependencies(type: Copy) {
into "$buildDir/libs/dependencies"
from configurations.runtimeDeps {
exclude module: 'groovy'
exclude module: 'aws-java-sdk-s3'
exclude module: 'commons-io'
}
}

关于Gradle 任务与运行时依赖项混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53051163/

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