9

マルチモジュールプロジェクト用のgradle1.4ビルドファイルを書いています。したがって、次のようなものを定義するルートbuild.gradleがあります。

subprojects {
    apply plugin: 'java'
    ...

これは、すべてのサブモジュールのビルドタスクを定義します。サブモジュールはsettings.gradleに含まれており、各モジュールには、定義された依存関係を持つビルドファイルがあります。

これまでのすべての本:)ここで、メインビルドファイルに、 aggregateJavadoc(すべてのjavadocを1つに収集)またはbundleJar(すべてのクラスからバンドルjarを作成)などのプロジェクトスコープタスクを追加しました。など。手動で呼び出すと、それぞれが機能します。

今、私はタスクリリースが必要です

  • すべてのサブモジュールをビルドします(コマンドラインから呼び出されます-つまり、サブモジュールごとにexecute()を手動で記述したくない)

  • 追加のタスクを呼び出します(execute()を使用すると思います)。

私はdependsOnを試しましたが、リストされたタスクの順序が守られていません。また、依存モジュールはリリースタスクの実行後に実行されているようです。私は他のいくつかのアイデアを試しましたが失敗しました。

質問:すべてのサブモジュールで何かを呼び出し、さらにいくつかのタスクを実行する必要がある、そのようなバッチタスクを作成するための最良の方法は何でしょうか?Gradleに適した最良のソリューションは何でしょうか?ありがとう!

4

1 に答える 1

12

これは、単純な依存関係管理で解決できることがありました。

したがって、多くのモジュールがあります。次に、ビルドするモジュールに依存する追加のタスクを作成しましょう。

task aggregateJavadoc(type: Javadoc) {
    dependsOn subprojects.build

task bundleJar(type: Jar) {
    dependsOn subprojects.build

最後に、私たちのreleaseタスクは単純に次のようになります。

task release() {
    dependsOn subprojects.build
    dependsOn aggregateJavadoc
    dependsOn bundleJar
    ...
}

これにより、最初にサブプロジェクトが構築されます。最初にリストされているからではなく、追加のタスクがビルドに依存しているためです。追加のタスクの順序は重要ではありません。これは私にとって最も理にかなっています。

サブプロジェクトの1つ(つまりモジュール)が非Javaモジュールである場合は、このプロジェクトの構築で問題が発生する可能性があります。私がしていることは、次のようにサブモジュールをグループ化することです。

def javaModules() {
    subprojects.findAll {it.name.contains('jodd-')}
}

そして、代わりに参照するためにsubprojects、どこでも使用してくださいjavaModules!例えば:

configure(javaModules()) {
    apply plugin: 'java'
    ...

task prj {
    dependsOn javaModules().build
}

ところで、繰り返しを防ぐために、ビルドに依存するすべての追加プロジェクトでこの「ダミー」タスクprjを使用しています。dependsOn

于 2013-01-30T16:35:54.220 に答える