如何在 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”。