gpt4 book ai didi

java - Gradle 中任务类型的继承树

转载 作者:行者123 更新时间:2023-12-01 05:04:27 24 4
gpt4 key购买 nike

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

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

自定义 SQLServerTask.groovy

import org.gradle.api.DefaultTaskimport org.gradle.api.tasks.TaskActionimport groovy.sql.Sqlclass 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    }}

然后,我在 build.gradle 中创建了一个任务,该任务将使用一些属性配置 SQLServerTask。

构建.gradle

import groovy.sql.Sqlapply 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 projectURLClassLoader loader = GroovyObject.class.classLoaderconfigurations.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}

dbhelpertasks.gradle 文件包含我要执行的实际任务的最终配置(SQL 语句)。

buildSrc/dbhelpertasks.gradle

task getSiteParams(type: contentDbTask) {    println "Configuring Site Params Task"    sql = "SELECT * FROM CMS_SITE_PARAM"}

当我执行gradle getSiteParams时,它最终失败

* What went wrong:A problem occurred evaluating script.> Could not find property 'contentDbTask' on root project 'shipyard'.

最佳答案

这里存在许多误解。

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

dbhelpertasks.grovvy 通常会进入顶级 gradle 目录(buildSrc 的同级目录)并以 .gradle 结尾。任务的预配置(例如 contentDbTask)通常由插件(例如 dbhelpertasks.gradle 脚本插件)而不是任务来完成。

任务的类型始终是类,因此 task getSiteParams(type: contentDbTask) 不起作用。此外,dbhelpertasks.groovy 无法看到由 build.gradle 添加的任务(或完成的任何其他配置),只能以相反的方式查看。这是因为后者在最顶部应用了前者(这很好)。

关于java - Gradle 中任务类型的继承树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12925129/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com