web-dev-qa-db-ja.com

Gradleはフルビルドから特定のサブプロジェクトを除外します


Gradleプロジェクトでは、機能テスト用の新しいモジュールを追加します。このモジュールは、他のサブプロジェクトから依存関係にアクセスできる必要がありますが、完全なプロジェクトビルドの一部としては実行されません。これを試しても、まだビルドされています:

def javaProjects() {
   return subprojects.findAll { it.name != 'functional-tests' }
}

configure(javaProjects()) {
   ...
}

project(':functional-tests') {
    ....
}

機能テストビルドを独自のbuild.gradleファイルに移動しても、結果は同じです。誰かがこれを達成する方法を指摘できますか?

16
Paddy

コマンドラインまたはビルドファイルを介して機能テストを実行しないようにすることで、より良いソリューションが見つかりました。

たとえば、機能テストを除くすべてのテストを実行するには、次を実行します。

$ gradle check -x :functional-tests:check

次に、プロジェクトをビルドするときに、サブプロジェクトをビルドすることはできますが、テストの実行を除外できます。

$ gradle clean assemble -x :functional-tests:check

より良いオプションは、プロパティが設定されていない限り、ビルドファイルの機能テストを無効にすることです。たとえば、build.gradle追加するもの:

project('functional-tests') {
    test {
        onlyIf {
            project.hasProperty("functionalTests")
        }
    }
}

このように、特定のビルドプロパティを指定しない限り、機能テストは常にスキップされます。

$ gradle check
$ gradle -PfunctionalTests check

お役に立てば幸いです!

27
Scott

私が知る限り、deactivateまたはexcludeプロジェクトの後にそれはsettings.gradleincludedとして含まれています。したがって、settings.gradleで次のように行うことができます。

include 'p1', 'p2', 'p3'

if (any_condition_here) {
   include 'functional-tests'
}

build.gradleでの追加チェックが必要になります-プロジェクトが含まれている場合は、プロジェクトを構成します。

頭に浮かぶのは、-aコマンドラインスイッチです。 here を参照してください。どういうわけか役に立つかもしれません。

6
Opal

サブプロジェクトを除外することはできませんが、サブプロジェクトタスクを無効にすることはできます。

gradle.taskGraph.whenReady {
  gradle.taskGraph.allTasks.each {
    if(it.project == project) {
      it.onlyIf { false }
    }
  }
}
4
Arto Pastinen

私はこのようにします:

//for all sub projects
subprojects {
    if (it.name != 'project name') {
        //do something
    }
}

この方法で、subprojectsの特別なプロジェクトを除外できます。

allprojectsまたはprojectでも使用できます。

3
Bruce