首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >复制没有预先注册的自定义任务的所有Gradle依赖项。

复制没有预先注册的自定义任务的所有Gradle依赖项。
EN

Stack Overflow用户
提问于 2022-09-12 22:53:38
回答 1查看 39关注 0票数 0

用例

获取所有依赖项(在build.gradle中不定义自定义任务)的用例是通过模板管道对每个依赖项执行策略冲突和漏洞分析。我们正在使用Nexus IQ进行评估。

示例

通过指定本地存储库下载所有依赖项,然后将模式提供给Nexus进行扫描,这可以简单地通过Maven来完成。在下面的示例中,我们将在舍入所有依赖项后,将maven-dependencies/*作为扫描目标提供给Nexus。

mvn -B clean verify -Dmaven.repo.local=${WORKSPACE}/maven-dependencies

为了在Gradle中做类似的事情,似乎最流行的方法是在build.gradle中引入自定义任务。我更愿意以一种不需要开发人员实现自定义任务的方式这样做;它更倾向于保持这些文件尽可能干净。我想让这一切发生的一种方法是:

  1. GRADLE_USER_HOME设置为${WORKSPACE}/gradle-user-home
  2. 运行find ${WORKSPACE}/gradle-user-home -type f -wholename '*/caches/modules*/files*/**/*.*'以获取所有依赖资源的位置(我不介意获取非存档文件)。
  3. 将所有文件从步骤1复制到gradle-dependencies文件夹。
  4. 提供gradle-dependencies/*作为扫描目标的Nexus。

结果

我是超级对这样做持谨慎态度,因为它看起来很烦琐,看起来并不是最可持续的解决方案。还有别的办法我应该考虑吗?

更新#1:我已经调整了我的问题,允许有自定义任务的答案,只是没有预先注册。预注册意味着自定义任务已经在build.gradle文件中。我也将在这次更新后提供我的答案。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-13 21:11:31

我不确定Gradle是否有能力注册外部的、自定义的任务,但这就是我如何使收支平衡的方式。我在一个名为copyAllDependencies.gradle的文件中创建了一个自定义任务,在管道运行时将该文件的内容(在用单个空格替换两个或多个空格的所有换行符和实例之后)附加到build.gradle中,然后运行gradlew copyAllDependencies。然后我将gradle-dependencies/*作为扫描目标传递给Nexus。

代码语言:javascript
复制
task copyAllDependencies(type: Copy) {
    def allConfigurations = [];
    configurations.each {
        if (it.canBeResolved) {
            allConfigurations += configurations."${it.name}"
        }
    };
    from allConfigurations
    into "gradle-dependencies"
}

我情不自禁地觉得这不是最优雅的解决方案,但它目前符合我的需要。

更新#1:最终,我决定要求开发团队在他们的build.gradle文件中指定这个自定义任务。将脚本内容回显到另一个文件中有太多的细微差别(因此在定义allConfigurations和遍历所有configurations时需要包括allConfigurations)。不过,我仍未回答原来的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73696001

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档