web-dev-qa-db-fra.com

Gradle exclut un sous-projet spécifique de la version complète


. Si j'essaye, cela se construit toujours:

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

configure(javaProjects()) {
   ...
}

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

Le résultat est le même, même si je déplace la génération de tests fonctionnels vers un fichier build.gradle distinct. Quelqu'un peut-il indiquer comment y parvenir?

16
Paddy

J'ai trouvé une meilleure solution pour exclure les tests fonctionnels de s'exécuter sur la ligne de commande ou via le fichier de construction.

Par exemple, pour exécuter tous les tests à l'exception des tests fonctionnels, exécutez:

$ gradle check -x :functional-tests:check

Ensuite, lors de la construction du projet, vous pouvez laisser le sous-projet se construire mais exclure leurs tests de l'exécution.

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

Une meilleure option consiste à désactiver les tests fonctionnels dans votre fichier de construction, sauf si une propriété est définie. Par exemple, dans votre build.gradle vous ajouteriez:

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

De cette façon, les tests fonctionnels sont toujours ignorés sauf si vous spécifiez une propriété de construction spécifique:

$ gradle check
$ gradle -PfunctionalTests check

J'espère que cela pourra aider!

27
Scott

Autant que je sache, il n'est pas possible de désactiver ou exclure le projet après il a été inclus dans settings.gradle. Par conséquent, cela peut être fait de la manière suivante dans settings.gradle:

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

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

Cela nécessitera un enregistrement supplémentaire build.gradle - pour configurer le projet s'il est inclus.

Ce qui me vient aussi à l'esprit est -a commutateur de ligne de commande, voir ici . Peut-être que cela pourrait être utile d'une manière ou d'une autre.

6
Opal

Vous ne pouvez pas exclure le sous-projet, mais vous pouvez désactiver les tâches de sous-projet:

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

Je le fais comme ça:

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

de cette façon, je peux exclure certains projets spéciaux dans subprojects.

vous pouvez également l'utiliser dans allprojects ou project.

3
Bruce