En essayant de comprendre les propriétés du projet gradle
Clairement je ne comprends pas ce qui se passe ici.
Je suppose que prop2 et prop3 ne peut pas être consulté car ils sont des variables au lieu de "propriétés du projet".
La question se pose car je voudrais les variables prop2 et prop3 être visibles à partir de l'intérieur de la "doTheThing()" la méthode, mais je ne veux pas avoir à les transmettre. Je veux que les variables qui doivent être accessibles dans le monde entier à des tâches, des méthodes et des classes (mais seulement à partir de l'intérieur dans le script lui-même) - et je tiens à être tapé (c'est pourquoi la définition de prop1 n'est pas acceptable).
Vraiment, bien que - je suppose que ce que je demande, c'est un peu d'aide pour comprendre un projet Gradle propriété, quelle est la syntaxe de " prop1 = "bla" est en train de faire.
J'ai lu le Gradle guide de l'utilisateur et également Gradle en Action - s'ils sont déjà expliquer ce concept, merci de m'indiquer la section de droite (peut-être que je passe à l'époque de ne pas comprendre ce qui se disait).
prop1 = "blah"
String prop2 = "bleah"
def prop3 = "blargh"
task testPropAccess << {
println "1: $prop1"
println "2: $prop2"
println "3: $prop3"
doTheThing()
}
private void doTheThing(){
println "4: $prop1"
println "5: $prop2" //error: Could not find property 'prop2' on root project 'script'
println "6: $prop3" //error: Could not find property 'prop3' on root project 'script'
}
ce lien a été très utile, merci. Suppose que j'ai besoin de faire un peu plus Groovy, orientée vers la recherche.
Pour ceux qui cherchent à faire la même, ma solution actuelle pour obtenir la fonctionnalité que je veux c'est de définir mon build-script propriétés à l'échelle dans une classe comme ceci:
class StaticProps { static String prop4 = System.getProperty("prop4", "wibble") }
Et puis les utiliser comme ceci: System.getProperty("prop4", StaticProps.prop4)
Pourquoi
System.getProperty()
deux fois?Copier-coller de l'erreur; doit être
println $BuildProps.prop4
OriginalL'auteur Shorn | 2011-10-10
Vous devez vous connecter pour publier un commentaire.
Lorsque vous déclarez une variable à l'extérieur de niveau (comme dans la deuxième et la troisième instruction), il devient une variable locale du script
run
méthode. C'est vraiment juste Groovy comportement, et rien de ce que Gradle pouvez facilement changer.Si vous voulez l'équivalent d'une variable globale, juste assigner une valeur à une unbound variable (comme dans votre première déclaration). Cela ajoute une propriété dynamique de Gradle est
Project
objet, qui est visible à travers le script de construction (à moins d'ombrage). En d'autres termes,prop1 = "blah"
est équivalent àproject.prop1 = "blah"
.Si vous voulez l'équivalent d'un tapé variable globale, vous aurez à attendre jusqu'à ce que Gradle mises à niveau Groovy 1.8, ce qui rend cela possible avec le
@Field
annotation. Ou vous écrire un plugin qui mêle une convention objet dans leProject
objet (mais ce n'est pas adapté pour ad-hoc de script).ext.prop1 = "blah"
. L'ancienne technique fonctionne encore mais est obsolète et génère un avertissement. À l'aide de l'ext est juste un bon moyen d'indiquer explicitement que vous avez l'intention de créer une nouvelle propriété. Si vous pensez que vous êtes en utilisant une propriété existante et sont involontairement faire un nouveau, qu'il peut être terriblement frustrant, donc c'est probablement un assez bon changement.Salut encore, Pierre. Petite question, j'ai créé un
ext.blah = 'foobar'
variable à haut niveau de construction.gradle fichier mais il n'est pas dans le champ debuildscript
, aucune idée pourquoi?Cela devrait être une question distincte (si elle n'existe pas déjà).
Ok, pas de problème, je vais créer un 🙂
lien vers cette question? Je suis curieux sur ce problème aussi!
OriginalL'auteur Peter Niederwieser