使用Jar gradle任务时如何避免命名冲突?

时间:2018-08-23 10:11:05

标签: gradle dependencies

我有几个依赖项:

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技能不完整...

1 个答案:

答案 0 :(得分:0)

我最终将依赖项复制到自定义构建目录,并在复制它们时重命名它们:

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}"
        }
    }
}

使用复制关闭而不是复制任务对我来说是一个突破。我无法想到一种在访问工件数据(例如版本和组)时复制工件的方法。