2017-10-10 3 views
0

Je suis confronté à un problème lorsque j'essaie d'arrêter gradle lorsqu'une condition n'est pas remplie. Je veux quand j'exécute une tâche spécifique et un fichier n'est pas présent pour lancer un GradleException mais à la place il ne parvient pas à se synchroniser avec Android Studio.Arrêt gradle sous condition

Mon code:

def mapFile = project.rootProject.file('../../maps.json') 
buildConfigField "error", "BUILD_ERROR", '"maps.json is missing"' 
if(!mapFile.exists()) throw new GradleException("File does not exist") 

J'ai trouvé cette solution (ne pas vraiment comme ça) avec le code:

buildConfigField "error", "BUILD_ERROR", '"maps.json is missing"' 

de sorte que le buildconfig va générer une variable d'erreur et le gradle arrêtera . Toutes les autres options de lancer réellement une exception et la synchronisation n'échoue pas?

+1

Êtes-vous essayer d'arrêter la construction en cours d'exécution en phase d'exécution, ou lors de la configuration? Je suppose que vous essayez de l'arrêter pendant la phase de configuration, ce qui explique peut-être pourquoi vous voyez une erreur de synchronisation avec IntelliJ ... Pouvez-vous trouver un petit exemple de fichier de construction qui ne se synchronise pas? –

+0

Je suis à peu près sûr que @tim_yates a raison. Si vous voulez seulement que la tâche échoue, vous devez utiliser une fermeture 'doFirst'. Si vous utilisez simplement la fermeture de la configuration de la tâche, la configuration de la tâche échouera et chaque invocation Gradle, même celle utilisée par Android Studio pour récupérer les informations. Cela entraîne une «synchronisation» échouée. –

+0

En fait, je me fiche de ce qui se passe dans Android Studio mais je viens d'ajouter ce travail à cause de CI. Quand je vais construire en CI et qu'il n'a pas le fichier, alors il plante/arrête tout ce qui échoue la construction. – matrix

Répondre

1

Pour que la tâche échoue et pas toute la construction, vous devez soulever l'exception à l'exécution des tâches:

task myTask(type: MyType) { 
    def mapFile = project.rootProject.file('../../maps.json') 
    // do some configuration ... 
    doFirst { 
     if(!mapFile.exists()) throw new GradleException("File does not exist") 
    } 
} 
+0

semble légitime va essayer et vous le faire savoir !!! – matrix