構成しようとしているMultiModule gradleプロジェクトがあります。
Root
projA
projB
other
projC
projD
projE
...
私ができるようにしたいのは、ルートbuild.gradleにタスクがあり、それが他のディレクトリの各プロジェクトでbuildJarタスクを実行することです。
できるとわかっている
configure(subprojects.findAll {it.name != 'tropicalFish'}) {
task hello << { task -> println "$task.project.name"}
}
しかし、これはprojAとprojBも取得します。c、d、eでのみタスクを実行したいです...これを達成する最良の方法を教えてください。
これらのどれを求めているかは完全にはわかりませんが、あなたのベースをカバーする必要があります。
1。タスクを直接呼び出す
あなたはただ電話できるはずです
gradle :other/projC:hello :other/projD:hello
私はこれでテストしました:
# Root/build.gradle
allprojects {
task hello << { task -> println "$task.project.name" }
}
そして
# Root/settings.gradle
include 'projA'
include 'projB'
include 'other/projC'
include 'other/projD'
2。サブプロジェクトでのみタスクを作成
それとも、タスクをother/*プロジェクトでのみ作成したいですか?
後者の場合、次のように機能します。
# Root/build.gradle
allprojects {
if (project.name.startsWith("other/")) {
task hello << { task -> println "$task.project.name" }
}
}
そして、次のようにして呼び出すことができます。
$ gradle hello
:other/projC:hello
other/projC
:other/projD:hello
other/projD
。サブプロジェクトのみでタスクを実行するタスクの作成
このバージョンは、あなたの質問の私の読書と一致します。つまり、サブプロジェクト(buildJar)に既にタスクがあり、サブプロジェクトother/*:buildJarのみを呼び出すルートにタスクを作成します。
allprojects {
task buildJar << { task -> println "$task.project.name" }
if (project.name.startsWith("other/")) {
task runBuildJar(dependsOn: buildJar) {}
}
}
これにより、すべてのプロジェクトでタスク「buildJar」が作成され、other/*プロジェクトでのみ「runBuildJar」が作成されるため、次のように呼び出すことができます。
$ gradle runBuildJar
:other/projC:buildJar
other/projC
:other/projC:runBuildJar
:other/projD:buildJar
other/projD
:other/projD:runBuildJar
あなたの質問は多くの方法で読むことができます、これがそれらすべてをカバーすることを望みます:)
私は同じ問題を抱えているため、今日この質問を見つけました。マークが言及した方法はすべて使用できますが、それらにはすべて欠点があります。そこで、もう1つのオプションを追加します。
4。現在のプロジェクトの切り替え
gradle -p other hello
これにより、「現在のプロジェクト」が切り替えられ、現在のプロジェクトの下でhello
という名前のすべてのタスクが実行されます。