Gradle에서 두 가지 구성 작업이 필요할 수있는 작업을 어떻게 분리합니까? 내가 buildSrc/dbhelpertasks.gradle 파일에서 부모 build.gradle 파일에서 실행하려는 실제 작업을 분리하려고합니다. build.gradle은 dbhelpertasks.gradle에서 사용되는 부분적으로 구성된 태스크를 포함합니다.Gradle의 작업 유형에 대한 상속 트리
데이터베이스 이름과 URL을 사용하는 SQLServerTask를 만들려고 여러 개의 다른 데이터베이스를 연결하고 SQL을 실행하려고합니다.
사용자 정의 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 } }
나는 다음 속성 중 일부와 함께 SQLServerTask를 구성 할 것입니다 내 build.gradle에서 작업을 만들었습니다.
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 }
dbhelpertasks.gradle 파일 내가 실행하고자하는 실제 작업의 최종 구성 (SQL 문)이 포함되어 있습니다. 내가 gradle getSiteParams
을 실행하면
task getSiteParams(type: contentDbTask) { println "Configuring Site Params Task" sql = "SELECT * FROM CMS_SITE_PARAM" }
dbhelpertasks.gradle
buildSrc/그것은 오해의 숫자가 여기에 있습니다
* What went wrong: A problem occurred evaluating script. > Could not find property 'contentDbTask' on root project 'shipyard'.
피터 감사합니다. dbhelpertasks.gradle 이름에 실수가있었습니다. 실제로 .groovy가 아닙니다. 나는 당신의 제안을 따라 gradle 디렉토리 (buildSrc의 형제)로 옮겼다. 나는 당신의 제안에 따라 작업을 플러그인에 의해 미리 구성하고 getSiteParams를 해당 플러그인의 유형으로 변경합니다. 플러그인이 dbhelpertasks.gradle에 있고 gradle.properties에 액세스 할 수 있습니까? –
'dbhelpertasks.gradle' *은 * (스크립트) 플러그인입니다. 바이너리 플러그인으로 변환 할 필요는 없습니다 (즉,'플러그인'인터페이스 구현). 'gradle.properties'는 직접 액세스되지 않습니다; 대신에,'gradle.properties'의 모든 속성은 자동으로'project' 객체의 속성이됩니다. 그러므로'dbhelpertasks.gradle'은 그것들 모두에 접근 할 수 있습니다. –
그래, contentDbTask를 설정할 수있는 플러그인을 만들거야. 내가 잃어버린 부분은 최종 사용자 지정 구성으로 사전 구성된 작업을 다시 사용하는 방법입니다. 미리 구성한 작업을 플러그인에서 만들 수도 있습니다. 구성을 마무리하고 사용자 지정 SQL 작업으로 여러 번 작업을 여러 번 재사용하는 방법에 대해 궁금합니다.예를 들어, 미리 연결 정보가있는 ContentDbTask를 얻었 으면 DAG의 다른 SQL 문으로 해당 작업을 실행하고 싶습니다. –