运行 一个 gradle 任务多次使用不同的参数

Running a gradle task multiple times with different parameters

我正在尝试编写一个 gradle 任务,它将缩小我项目的所有 javascript 文件。我正在使用 gradle 库:com.eriwen.gradle.js。该库包含一个名为 minifyJs 的任务,我们在其中定义要缩小的源文件和缩小文件的目标:

minifyJs {
  source = file(sourcePathString)
  dest = file(targetPathString)
}

我想做的是为我项目中的每个 javascript 文件调用执行此任务,并在每个文件的新路径中生成它的缩小版本。这将需要我每次使用不同的 sourcedest 值多次 运行 minifyJs 任务,但我似乎无法找到解决方法这个。有人建议我们使用循环为每个 javascript 文件创建一个 type: minifyJs 的新任务,但这需要大量时间并且会创建 250 多个任务,即根本没有效果。

由于在另一个任务中调用一个任务不起作用(并且使用 task.execute() 是一种不好的做法)我实际上是在寻找一种解决方法来实现这一点:

task customMinify {
  def jsFileTree = fileTree('my/javascript/files')
  jsFileTree.forEach {
    def jsFile = it
    minifyJs {
      source = file(jsFile.getPath())
      dest = file('new/path/to/file.js')
    }
  }
}

这显然行不通,因为我们不能在另一个任务中调用 minifyJs

我真的很抱歉,这个差距在 gradle-js-plugin.

中继续存在

生成任务不行,建议你write a custom task under buildSrc combining my JsMinifier and the MinifyJsTask

如果你愿意等8个小时左右,我可以稍后再写一个实现。

编辑:这是一个 gist for a ClosureMinifyTask 你可以放入 buildSrc/src/main/groovy/com/eriwen/gradle/js/tasks 它会单独缩小每个文件并生成单独的源映射文件等。

buildSrc/build.gradle:

repositories {
    mavenCentral()
}

dependencies {
    compile localGroovy()
    compile gradleApi()
    compile ('com.google.javascript:closure-compiler:v20151015') {
        exclude module: 'junit'
    }
}

示例用法:

task mini(type: com.foo.bar.ClosureMinifyTask) {
    source = "src/js"
    dest = "${buildDir}/js/minified"
}