1

Gradle で 2 つの異なる構成タスクを必要とする可能性のあるタスクを明確に分離するにはどうすればよいですか? buildSrc/dbhelpertasks.gradle ファイルで実行したい実際のタスクを、親の build.gradle ファイルから分離しようとしています。build.gradle には、dbhelpertasks.gradle で使用される部分的に構成されたタスクが含まれます。

接続して SQL を実行したいデータベースが多数あるため、データベース名と URL を受け取る SQLServerTask を作成しました。

カスタム 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'

    @タスクアクション
    def executeSql() {
        url = ホスト名 + ":" + ポート + "/" + データベース
        databaseConnProps = [ユーザー: ユーザー名、パスワード: パスワード]
        def sqlInstance = Sql.newInstance (url、databaseConnProps、sqlServerDriver)
        println "実行します" + sql
    }

}

次に、いくつかのプロパティを使用して SQLServerTask を構成するタスクを build.gradle に作成しました。

build.gradle

groovy.sql.Sql をインポートする
適用元: 'buildSrc/dbhelpertasks.gradle'
リポジトリ {
    mavenCentral()
}

構成 {
    運転者
}

依存関係{
    ドライバー グループ:「net.sourceforge.jtds」、名前:「jtds」、バージョン:「1.2.4」
}

//このプロジェクトで使用するすべてのドライバーをロードします
URLClassLoader loader = GroovyObject.class.classLoader
configuration.driver.each {ファイル file ->
    loader.addURL(ファイル.toURL())
}

タスク contentDbTask(タイプ: SQLServerTask) {
    println "コンテンツ データベース タスクの構成"
    ホスト名 = contentDbUrl
    データベース = contentDbName
    ユーザー名 = contentDbUserName
    パスワード = contentDbPassword
}

dbhelpertasks.gradle ファイルには、実行する実際のタスクの最終構成 (SQL ステートメント) が含まれています。

buildSrc/dbhelpertasks.gradle

task getSiteParams(type: contentDbTask) {
    println "サイト パラメータ タスクの構成"
    sql = "SELECT * FROM CMS_SITE_PARAM"
}

実行するgradle getSiteParamsと失敗する

* 何が悪かったのか:
スクリプトの評価中に問題が発生しました。
> ルート プロジェクト 'shipyard' でプロパティ 'contentDbTask' が見つかりませんでした。
4

1 に答える 1

0

ここには多くの誤解があります。

の唯一の目的は、メイン ビルドで使用されるクラスを生成することSQLServerTaskであるためです。buildSrcbuildSrc

dbhelpertasks.grovvy. は通常、最上位gradleディレクトリ ( の兄弟buildSrc) に入り、 で終わり.gradleます。タスクの事前構成は、通常、タスクではなくプラグcontentDbTaskイン (スクリプト プラグインなど) によって行われます。dbhelpertasks.gradle

タスクのタイプは常にクラスであるため、機能しtask getSiteParams(type: contentDbTask)ません。また、dbhelpertasks.groovyによって追加されたタスク (またはその他の構成が行われた) は表示されbuild.gradleず、その逆のみです。これは、後者が前者を一番上に適用するためです (これで問題ありません)。

于 2012-10-17T06:08:01.253 に答える