Java Gradle中任务类型的继承树

Java Gradle中任务类型的继承树,java,groovy,build,gradle,Java,Groovy,Build,Gradle,如何在Gradle中将可能需要两个不同配置任务的任务完全分开?我正在尝试将要在buildSrc/dbhelpertasks.gradle文件中执行的实际任务与父build.gradle文件分开。build.gradle将包含dbhelpertasks.gradle中使用的部分配置任务 我有许多不同的数据库要连接并在其上执行SQL,因此我创建了一个SQLServerTask,它采用数据库名称和URL 自定义SQLServerTask.groovy import org.gradle.api.Def

如何在Gradle中将可能需要两个不同配置任务的任务完全分开?我正在尝试将要在buildSrc/dbhelpertasks.gradle文件中执行的实际任务与父build.gradle文件分开。build.gradle将包含dbhelpertasks.gradle中使用的部分配置任务

我有许多不同的数据库要连接并在其上执行SQL,因此我创建了一个SQLServerTask,它采用数据库名称和URL

自定义SQLServerTask.groovy

import org.gradle.api.DefaultTask import org.gradle.api.tasks.TaskAction import groovy.sql.Sql class SQLServerTask extends DefaultTask { def hostname def database def port = 1433 def username def password def sql def sqlServerDriver = 'net.sourceforge.jtds.jdbc.Driver' @TaskAction def executeSql() { url = hostname + ":" + port + "/" + database databaseConnProps = [user: username, password: password] def sqlInstance = Sql.newInstance(url, databaseConnProps, sqlServerDriver) println "I would execute " + sql } }
这里有许多误解

首先,buildSrc中应该只有类SQLServerTask,因为buildSrc的唯一目的是生成然后由主构建使用的类

dbhelpertasks.grovy通常会进入buildSrc的顶级gradle目录同级,并以.gradle结尾。与contentDbTask一样,任务的预配置通常由dbhelpertasks.gradle脚本插件之类的插件而不是任务来完成


任务的类型始终是类,因此任务getSiteParamstype:contentDbTask将不起作用。另外,dbhelpertasks.groovy无法看到build.gradle添加的任务或完成的任何其他配置,只有相反的方式。这是因为后者将前者应用于顶部,这很好。

谢谢你,彼得。我在dbhelpertasks.gradle名称中出错。确实是。格雷德尔不是。太棒了。我按照您的建议,将其移动到buildSrc的gradle目录同级目录中。我会按照你的建议,对插件完成的任务进行预配置,并将getSiteParams更改为该插件的类型。该插件是否位于dbhelpertasks.gradle中,并且是否可以访问gradle.properties?dbhelpertasks.gradle是一个脚本插件。您不必将其转换为二进制插件,即插件接口的实现。无法直接访问gradle.properties;相反,gradle.properties中的所有属性将自动成为项目对象的属性。因此,dbhelpertasks.gradle将可以访问所有这些任务。我想我迷路的地方是如何在最终自定义配置中重新使用预配置的任务。我可以在插件中创建预配置的任务没有问题,我只是想知道如何完成配置,并使用我的自定义sql工具多次重用任务。例如,一旦我有了一个具有预配置连接信息的ContentDbTask,我想在DAG.dbhelpertasks中使用不同的SQL语句执行该任务。gradle可以使用tasks.withTypeContentDbTask{…}预配置所有ContentDbTask任务。此配置将应用于该类型的所有任务,无论是谁创建的任务。顺便说一句,任务类型的名称中不应包含任务。紧密!我会试试这个。是否有一个样式指南可以指出任务命名约定? import groovy.sql.Sql apply from: 'buildSrc/dbhelpertasks.gradle' repositories { mavenCentral() } configurations { driver } dependencies { driver group: 'net.sourceforge.jtds', name: "jtds", version: "1.2.4" } //Load up all the drivers for use in this project URLClassLoader loader = GroovyObject.class.classLoader configurations.driver.each {File file -> loader.addURL(file.toURL()) } task contentDbTask(type: SQLServerTask) { println "Configuring content db task" hostname = contentDbUrl database = contentDbName username = contentDbUserName password = contentDbPassword } task getSiteParams(type: contentDbTask) { println "Configuring Site Params Task" sql = "SELECT * FROM CMS_SITE_PARAM" } * What went wrong: A problem occurred evaluating script. > Could not find property 'contentDbTask' on root project 'shipyard'.