gradle - 使用 Jar gradle 任务时如何避免命名冲突?
问题描述
我有几个依赖项:
apply plugin: 'java'
apply plugin: 'java-library-distribution'
repositories {
maven {
url "https://maven.google.com/"
}
mavenCentral()
}
dependencies {
compile 'android.arch.core:common:1.1.1'
compile 'android.arch.core:runtime:1.1.1'
compile 'android.arch.lifecycle:common:1.1.1'
compile 'android.arch.lifecycle:compiler:1.1.1'
compile 'android.arch.lifecycle:extensions:1.1.1'
compile 'android.arch.lifecycle:reactivestreams:1.1.1'
compile 'android.arch.lifecycle:runtime:1.1.1'
}
我将它们放入 jar 分发中:
gradle distZip
但是有几个依赖项具有相同的名称和版本,因此生成的 zip 文件中有重复项:
-rw-r--r-- 0 0 0 50121 Aug 23 09:48 gradleTest/lib/compiler-1.1.1.jar
-rw-r--r-- 0 0 0 5124 Aug 23 09:48 gradleTest/lib/runtime-1.1.1.aar
-rw-r--r-- 0 0 0 9635 Aug 23 09:48 gradleTest/lib/runtime-1.1.1.aar
-rw-r--r-- 0 0 0 11567 Aug 23 09:48 gradleTest/lib/common-1.1.1.jar
-rw-r--r-- 0 0 0 20618 Aug 23 09:48 gradleTest/lib/common-1.1.1.jar
我试图重命名 zip 中的文件,但我不知道如何。我编写了一个将所有依赖项复制到“lib”目录的任务,但只有最后一个依赖项被复制到该目录:
task copyToLib(type: Copy) {
into "lib"
project.configurations.runtime.resolvedConfiguration.getResolvedArtifacts().each { artifact ->
println "${artifact.moduleVersion.id.group}.${artifact.name}-${artifact.moduleVersion.id.version}.${artifact.extension}"
from artifact.file
rename "(.*)", "${artifact.moduleVersion.id.group}.${artifact.name}-${artifact.moduleVersion.id.version}.${artifact.extension}"
}
}
我还查看了 jar.eachFile 来重命名文件,但我不知道如何从该闭包中获取工件组。我的gradle技能不完整...
解决方案
我最终将依赖项复制到自定义构建目录,并在复制它们时重命名它们:
task copyToLib() {
project.configurations.runtime.resolvedConfiguration.resolvedArtifacts.each { artifact ->
println "${artifact.moduleVersion.id.group}.${artifact.name}-${artifact.moduleVersion.id.version}.${artifact.extension}"
copy {
from artifact.file
into "${project.buildDir}/lib"
rename "(.*)", "${artifact.moduleVersion.id.group}.${artifact.name}-${artifact.moduleVersion.id.version}.${artifact.extension}"
}
}
}
使用复制闭包代替复制任务是我的突破。我想不出一种方法来复制工件,同时可以访问工件数据,例如版本和组。
推荐阅读
- python - 在 GCP 上运行的 Jupyter Notebook 在重新附加屏幕 linux 后不显示输出
- python - 集成 osmosis 和 python 从 .osm 文件中获取数据
- python - Python 等价于 R 的 lpSolve 用于线性规划
- bash - 权限被拒绝(公钥) sudo ssh -i
ubuntu@ip? - javascript - Firebase 管理员,导入用户不起作用
- python - 从 Windows 到 Ubuntu 的 python 错误
- python - 根据列的格式从excel中删除记录
- javascript - 具有两个值的条件渲染
- xml - 如何在odoo 10中的qweb中获得重复发票水印上的打印按钮计数器
- node.js - 触发操作方法的替代方法