如何在 Gradle 中清晰地分离可能需要两个不同配置任务的任务?我正在尝试将要在 buildSrc/dbhelpertasks.gradle 文件中执行的实际任务与父 build.gradle 文件分开。build.gradle 将包含在 dbhelpertasks.gradle 中使用的部分配置的任务。
我有许多不同的数据库要连接并在其上执行 SQL,因此我创建了一个 SQLServerTask,它采用数据库名称和 URL。
自定义 SQLServerTask.groovy
导入 org.gradle.api.DefaultTask 导入 org.gradle.api.tasks.TaskAction 导入 groovy.sql.Sql 类 SQLServerTask 扩展 DefaultTask { 定义主机名 定义数据库 默认端口 = 1433 默认用户名 默认密码 定义 sql def sqlServerDriver = 'net.sourceforge.jtds.jdbc.Driver' @TaskAction def 执行Sql() { url = 主机名 + “:” + 端口 + “/” + 数据库 databaseConnProps = [用户:用户名,密码:密码] def sqlInstance = Sql.newInstance(url, databaseConnProps, sqlServerDriver) println "我会执行" + sql } }
然后,我在 build.gradle 中创建了一个任务,该任务将使用一些属性配置 SQLServerTask。
构建.gradle
导入 groovy.sql.Sql 申请自:'buildSrc/dbhelpertasks.gradle' 存储库{ mavenCentral() } 配置{ 司机 } 依赖{ 驱动程序组:“net.sourceforge.jtds”,名称:“jtds”,版本:“1.2.4” } //加载本项目使用的所有驱动程序 URLClassLoader 加载器 = GroovyObject.class.classLoader configuration.driver.each {文件文件-> loader.addURL(file.toURL()) } 任务内容DbTask(类型:SQLServerTask){ println "配置内容数据库任务" 主机名 = contentDbUrl 数据库 = contentDbName 用户名 = contentDbUserName 密码 = contentDbPassword }
dbhelpertasks.gradle 文件包含我要执行的实际任务的最终配置(SQL 语句)。
buildSrc/dbhelpertasks.gradle
任务getSiteParams(类型:contentDbTask){ println "配置站点参数任务" sql = "选择 * 从 CMS_SITE_PARAM" }
当我执行gradle getSiteParams
它最终失败
* 什么地方出了错: 评估脚本时出现问题。 > 在根项目“shipyard”上找不到属性“contentDbTask”。