首页 > 解决方案 > 使用 gradle 构建 Zip 任务,包括选定的依赖项

问题描述

我想在 gradle 中创建包含少量类且仅需要依赖项的 zip/war/jar 工件

我有一个简单的 zip 任务,如下所示:

 task myZip(type: Zip) {
    from sourceSets.main.output
    include 'com/mypackage/*'   
    archiveName 'myzip.zip'
    }

现在我想包含一些编译依赖示例 build.gradle 骨架:

 apply plugin : 'java'
    apply plugin : 'eclipse'
    apply plugin: 'maven-publish'
    repositories{
    }
    configurations
    {
    }
    dependencies
    {
    compile <dependency1>
    compile <dependency2>
    compile <dependency3>
    ...

    compile <dependency20>
    myzipjar <dependency3>
    myzipjar <dependency6>
    myzipjar <dependency13>
    }

对于我的 zip 任务:

task myZip(type: Zip) {
      from sourceSets.main.output
     include 'com/mypackage/*'
    **into 'lib'
    from configurations.myzipjar**   
     archiveName 'myzip.zip'

    }

标签: gradlebuilddependencies

解决方案


解决方案取决于所需的选择标准。

您可以将其视为可以查询实例Configuration的常规:FileCollectionFile

configurations.compile.findAll
{
    it.name.startsWith == "required-prefix" // it is an instance of File
}

...或者您可以使用它的getResolvedConfiguration()方法通过原始Dependency实例过滤解析结果:

configurations.compile.resolvedConfiguration.getFiles
{
    it.group == "target-group" // it is an instance of Dependency
}

或者,也许您应该考虑使用将包含在compile配置和您的 zip 任务中的单独配置:

configurations
{
    zippableCompile
    compile.extendsFrom zippableCompile
}

dependencies
{
    zippableCompile <...>
}

PS 该compile配置自 Gradle 3.4 起已弃用,请implementation改用。


推荐阅读