我正在尝试使用gradle分发插件为我的项目创建多个分发。

我很成功,但是有很多重复,我想知道是否有一种方法可以定义闭包以涵盖不同分布中的相似之处?

这样的事情会很棒:

apply plugin: 'distribution'

def commonPart = { location ->
    into('a') {
        from("$projectDir/src/main/config/$location/A")
    }
    into('b') {
        from("$projectDir/src/main/config/$location/B")
    }
    ..
    <lots more>
}

distributions {

    firstPackage {
        contents {
            ['shared', 'concrete-a'].each commonPart
        }
    }

    secondPackage {
        contents {
            ['shared', 'concrete-b'].each commonPart
        }
    }
}

但是我得到这个:

最佳答案

这将是:

apply plugin: 'distribution'

def commonPart = { location ->
    return {
         into('a') {
         from("$projectDir/src/main/config/$location/A")
       }
       into('b') {
         from("$projectDir/src/main/config/$location/B")
       }
    }
}

distributions {

    firstPackage {
        ['shared', 'concrete-a'].collect { contents commonPart(it) }
    }

    secondPackage {
        ['shared', 'concrete-b'].collect { contents commonPart(it) }
    }
}

Here,您可以找到一个演示。

08-05 09:41