Gradle动态生成任务

Gradle动态生成任务,gradle,Gradle,这是我第一次尝试使用clojure,我正在尝试在build.gradle文件中生成一些任务。我遇到了复杂的错误,例如: *其中: 构建文件“/Users/austin/Repositories/test/Build.gradle”行:47 *出了什么问题: 评估根项目“测试”时出现问题。 无法为类型为de.underuch.gradle.tasks.downloadDriverfirefox的任务设置只读属性“src”的值 我相当肯定这只是因为我对groovy语言缺乏经验,但我确实可以使用一些指

这是我第一次尝试使用clojure,我正在尝试在build.gradle文件中生成一些任务。我遇到了复杂的错误,例如:

*其中:

构建文件“/Users/austin/Repositories/test/Build.gradle”行:47

*出了什么问题:

评估根项目“测试”时出现问题。 无法为类型为de.underuch.gradle.tasks.downloadDriverfirefox的任务设置只读属性“src”的值

我相当肯定这只是因为我对groovy语言缺乏经验,但我确实可以使用一些指针来指出我的错误所在

ext {
// The drivers we want to use
drivers = ["firefox", "chrome"]

driversSrc = [:]
driversSrc['firefox'] = 'https://github.com/mozilla/geckodriver/releases/download/v0.15.0/geckodriver-v0.15.0-macos.tar.gz'
driversSrc['chrome'] = 'https://chromedriver.storage.googleapis.com/2.29/chromedriver_mac64.zip'

driverDest = new File("${buildDir}/webdrivers")
}

import org.gradle.api.tasks.*
import de.undercouch.gradle.tasks.download.Download

driversSrc.each { driver, path ->
tasks.create(name: 'downloadDriver'+"${driver}", type: Download) {
    src = path
    dest ext.driverDest
    overwrite true
}
}

driversSrc.each {driver ->
tasks.create(name: 'unzipDriver'+"${driver}", dependsOn: 'downloadDriver'+"${driver}", type: Copy) {
    from zipTree(file('downloadDriver'+"${driver}").dest)
    into buildDir/'webdrivers'
}
}

我做过的事情:

buildscript {
  repositories {
    jcenter()
  }

  dependencies {
    classpath "de.undercouch:gradle-download-task:3.2.0"
  }
}

allprojects {
  repositories {
    jcenter()
  }
}
import de.undercouch.gradle.tasks.download.Download

apply plugin: "de.undercouch.download"

ext {
  driversSrc = [
          "firefox": "https://github.com/mozilla/geckodriver/releases/download/v0.15.0/geckodriver-v0.15.0-macos.tar.gz",
          "chrome" : "https://chromedriver.storage.googleapis.com/2.29/chromedriver_mac64.zip"
  ]
  driverDest = "${buildDir}/webdrivers"
}

driversSrc.each { driver, path ->
  def fileDest = new File(driverDest, new File(path).getName())

  tasks.create(name: "downloadDriver${driver}", type: Download) {
    src path
    dest fileDest
    overwrite true
  }

  tasks.create(name: "unzipDriver${driver}", dependsOn: "downloadDriver${driver}", type: Copy) {
    from path.endsWith("zip") ? zipTree(file(fileDest)) : tarTree(file(fileDest))
    into driverDest
  }
}
./gradlew unzipDriverfirefox unzipDriverchrome*
  • 清理地图以存储数据
  • 因为您使用的是这个插件:,所以我必须确保任务使用正确
  • 因为您有tar,所以必须使用
    tarTree
    以及
    zipTree
请试试这个:

buildscript {
  repositories {
    jcenter()
  }

  dependencies {
    classpath "de.undercouch:gradle-download-task:3.2.0"
  }
}

allprojects {
  repositories {
    jcenter()
  }
}
import de.undercouch.gradle.tasks.download.Download

apply plugin: "de.undercouch.download"

ext {
  driversSrc = [
          "firefox": "https://github.com/mozilla/geckodriver/releases/download/v0.15.0/geckodriver-v0.15.0-macos.tar.gz",
          "chrome" : "https://chromedriver.storage.googleapis.com/2.29/chromedriver_mac64.zip"
  ]
  driverDest = "${buildDir}/webdrivers"
}

driversSrc.each { driver, path ->
  def fileDest = new File(driverDest, new File(path).getName())

  tasks.create(name: "downloadDriver${driver}", type: Download) {
    src path
    dest fileDest
    overwrite true
  }

  tasks.create(name: "unzipDriver${driver}", dependsOn: "downloadDriver${driver}", type: Copy) {
    from path.endsWith("zip") ? zipTree(file(fileDest)) : tarTree(file(fileDest))
    into driverDest
  }
}
./gradlew unzipDriverfirefox unzipDriverchrome*
要运行任务:

buildscript {
  repositories {
    jcenter()
  }

  dependencies {
    classpath "de.undercouch:gradle-download-task:3.2.0"
  }
}

allprojects {
  repositories {
    jcenter()
  }
}
import de.undercouch.gradle.tasks.download.Download

apply plugin: "de.undercouch.download"

ext {
  driversSrc = [
          "firefox": "https://github.com/mozilla/geckodriver/releases/download/v0.15.0/geckodriver-v0.15.0-macos.tar.gz",
          "chrome" : "https://chromedriver.storage.googleapis.com/2.29/chromedriver_mac64.zip"
  ]
  driverDest = "${buildDir}/webdrivers"
}

driversSrc.each { driver, path ->
  def fileDest = new File(driverDest, new File(path).getName())

  tasks.create(name: "downloadDriver${driver}", type: Download) {
    src path
    dest fileDest
    overwrite true
  }

  tasks.create(name: "unzipDriver${driver}", dependsOn: "downloadDriver${driver}", type: Copy) {
    from path.endsWith("zip") ? zipTree(file(fileDest)) : tarTree(file(fileDest))
    into driverDest
  }
}
./gradlew unzipDriverfirefox unzipDriverchrome*