用例
获取所有依赖项(在build.gradle中不定义自定义任务)的用例是通过模板管道对每个依赖项执行策略冲突和漏洞分析。我们正在使用Nexus IQ进行评估。
示例
通过指定本地存储库下载所有依赖项,然后将模式提供给Nexus进行扫描,这可以简单地通过Maven来完成。在下面的示例中,我们将在舍入所有依赖项后,将maven-dependencies/*作为扫描目标提供给Nexus。
mvn -B clean verify -Dmaven.repo.local=${WORKSPACE}/maven-dependencies
为了在Gradle中做类似的事情,似乎最流行的方法是在build.gradle中引入自定义任务。我更愿意以一种不需要开发人员实现自定义任务的方式这样做;它更倾向于保持这些文件尽可能干净。我想让这一切发生的一种方法是:
GRADLE_USER_HOME设置为${WORKSPACE}/gradle-user-home。find ${WORKSPACE}/gradle-user-home -type f -wholename '*/caches/modules*/files*/**/*.*'以获取所有依赖资源的位置(我不介意获取非存档文件)。gradle-dependencies文件夹。gradle-dependencies/*作为扫描目标的Nexus。结果
我是超级对这样做持谨慎态度,因为它看起来很烦琐,看起来并不是最可持续的解决方案。还有别的办法我应该考虑吗?
更新#1:我已经调整了我的问题,允许有自定义任务的答案,只是没有预先注册。预注册意味着自定义任务已经在build.gradle文件中。我也将在这次更新后提供我的答案。
发布于 2022-09-13 21:11:31
我不确定Gradle是否有能力注册外部的、自定义的任务,但这就是我如何使收支平衡的方式。我在一个名为copyAllDependencies.gradle的文件中创建了一个自定义任务,在管道运行时将该文件的内容(在用单个空格替换两个或多个空格的所有换行符和实例之后)附加到build.gradle中,然后运行gradlew copyAllDependencies。然后我将gradle-dependencies/*作为扫描目标传递给Nexus。
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)。不过,我仍未回答原来的问题。
https://stackoverflow.com/questions/73696001
复制相似问题