1. ホーム
  2. java

[解決済み] Gradleスクリプトを別のスクリプトにインポートするには?

2022-12-22 12:19:12

質問

私は、多数のNetBeansプロジェクトの構築と多数の環境へのデプロイに関する機能のロードをラップする複雑なGradleスクリプトを持っています。

スクリプトは非常によく動作しますが、本質的には、プロジェクトと環境情報を保持する半ダースのマップを通してすべて構成されています。

私は、タスクを別のファイルに抽象化して、単純なビルド ファイルで私のマップを定義し、別のファイルからタスクをインポートできるようにしたいと思います。この方法で、私は多くのプロジェクトに同じコア タスクを使用し、単純なマップのセットでこれらのプロジェクトを構成することができます。

誰か、Antのタスクと同様の方法で、あるGradleファイルを別のファイルにインポートする方法を教えてください。私はこれまでGradleのドキュメントをくまなく見てきましたが、無駄でした。

追加情報

以下のトムさんの回答を受けて、私が言いたいことを正確に明らかにしてみようと思いました。

基本的に、私はいくつかのサブプロジェクトを実行するGradleスクリプトを持っています。しかし、サブプロジェクトはすべて NetBeans プロジェクトであり、独自の ant ビルドスクリプトが付属しているので、私はこれらのそれぞれを呼び出すために Gradle でタスクを持っています。

私の問題は、ファイルの先頭に以下のようないくつかの構成があることです。

projects = [
    [name:"MySubproject1", shortname: "sub1", env:"mainEnv", cvs_module="mod1"],
    [name:"MySubproject2", shortname: "sub2", env:"altEnv", cvs_module="mod2"]
]

そして、次のようなタスクを生成しています。

projects.each({
    task "checkout_$it.shortname" << {
         // Code to for example check module out from cvs using config from 'it'.
    }
})

この種のタスク生成スニペットはたくさんありますが、どれも汎用的で、プロジェクトリストの設定に完全に依存しています。

ですから、私が欲しいのは、これを別のスクリプトに入れ、次のような方法でインポートする方法です。

projects = [
    [name:"MySubproject1", shortname: "sub1", env:"mainEnv", cvs_module="mod1"],
    [name:"MySubproject2", shortname: "sub2", env:"altEnv", cvs_module="mod2"]
]

import("tasks.gradle") // This will import and run the script so that all tasks are generated for the projects given above.

つまり、この例では、tasks.gradleはすべての汎用タスク生成コードを持ち、メインのbuild.gradleファイルで定義されたプロジェクトに対して実行されることになるのです。このように、tasks.gradleは、NetBeans antビルドファイルを持つ多くのサブプロジェクトからなるすべての大規模プロジェクトで使用することができるファイルです。

どのように解決するのですか?

質問の答えは、プラグインシステムにあることがわかりました。 buildSrc/src/main/groovy . プラグインはJarとしてバンドルすることもできますが、私はこれを試したことはありません。

詳細はこちら。 カスタムプラグイン