当前位置: 首页 > 知识库问答 >
问题:

Gradle中任务类型的继承树

易瀚漠
2023-03-14

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

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

自定义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
    }

}

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

Build.Gradle

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"
}

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

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

共有1个答案

南门建章
2023-03-14

这里有很多误解。

首先,buildsrc中只应包含类sqlservertask,因为buildsrc的唯一目的是生成主生成使用的类。

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

任务的类型始终是类,因此task getSiteParams(type:contentDbTask)不起作用。而且,dbhelpertasks.groovy不能看到build.gradle添加的任务(或完成的任何其他配置),只能看到相反的情况。这是因为后者将前者应用在最上面(这很好)。

 类似资料:
  • 本文向大家介绍JavaScript中的继承之类继承,包括了JavaScript中的继承之类继承的使用技巧和注意事项,需要的朋友参考一下 继承简介       在JS中继承是一个非常复杂的话题,比其他任何面向对象语言中的继承都复杂得多。在大多数其他面向对象语言中,继承一个类只需使用一个关键字即可。在JS中想要达到继承公用成员的目的,需要采取一系列措施。JS属于原型式继承,得益于这种灵活性,我们既可以

  • 我在Hibernate中有道传承,下面是代码: 用户DAO: 我有一个域类用户和两个子类用户:Customer和Sales。我有两个dao类,分别用于客户和销售。 用户DAO: 客户道: 销售DAO: 我的问题是,当我使用CusterDap调用方法getUserByUsername()(继承自BaseDaoImpl)与销售的用户名(拥有用户名的用户是SalesRep的实例,而不是客户)时,它会抛出

  • 我有一个超类型(CaseDTO),其中有几个子类型(GroupCaseDTO,IPCaseDTO),我想注入。开发环境是JDev 12c。 以下是两个注射点: > @将@CaseContext private CaseDTO muwCase注入; 注入特定子类型(此注入点仅适用于一个子类型): @将@CaseContext private GroupCaseDTO muwCase注入; 为了获得这

  • 我一直在做一个基本的类继承练习,尽管我认为我已经掌握了它的jist,但我的程序并没有按应有的方式工作。我遇到了编译错误,但还没有弄清楚原因——如果你们都能在这里帮助我,那就太好了。 首先,这里有三个文件1。人java——基类2。大学生java——一个派生的Person类。java 3。家庭java——不太确定,我认为它是自己的基类 人java有两个实例变量,String name和int age,

  • 1、定义类的继承 说到继承,你一定会联想到继承你老爸的家产之类的。 类的继承也是一样。 比如有一个旧类,是可以算平均数的。然后这时候有一个新类,也要用到算平均数,那么这时候我们就可以使用继承的方式。新类继承旧类,这样子新类也就有这个功能了。 通常情况下,我们叫旧类为父类,新类为子类。 首先我们来看下类的继承的基本语法: class ClassName(BaseClassName): <st

  • 类继承是一个类扩展另一个类的一种方式。 因此,我们可以在现有功能之上创建新功能。 “extends” 关键字 假设我们有 class Animal: class Animal { constructor(name) { this.speed = 0; this.name = name; } run(speed) { this.speed = speed;