Dans le cadre de mon projet, je dois lire les fichiers d'un répertoire et effectuer certaines opérations, toutes dans le script de construction. L'opération est la même pour chaque fichier (lecture et exécution de requêtes SQL). Je pense que c'est une tâche répétitive et qu'il vaut mieux écrire à l'intérieur d'une méthode. Depuis que je suis nouveau, je ne sais pas comment cela devrait être. S'il vous plaît aider.
Une approche donnée ci-dessous:
ext.myMethod = { param1, param2 ->
// Method body here
}
Notez que cela est créé pour la portée du projet, c.-à-d. disponible globalement pour le projet, qui peut être appelé comme suit n'importe où dans le script de construction à l'aide de myMethod(p1, p2)
, ce qui équivaut à project.myMethod(p1, p2)
La méthode peut également être définie sous différentes portées, telles que dans les tâches:
task myTask {
ext.myMethod = { param1, param2 ->
// Method body here
}
doLast {
myMethod(p1, p2) // This will resolve 'myMethod' defined in task
}
}
Si vous avez défini des méthodes dans un autre fichier, * .gradle - ext.method () le rend accessible à l’ensemble du projet. Par exemple, voici un
versioning.gradle
// ext makes method callable project wide
ext.getVersionName = { ->
try {
def branchout = new ByteArrayOutputStream()
exec {
commandLine 'git', 'rev-parse', '--abbrev-ref', 'HEAD'
standardOutput = branchout
}
def branch = branchout.toString().trim()
if (branch.equals("master")) {
def stdout = new ByteArrayOutputStream()
exec {
commandLine 'git', 'describe', '--tags'
standardOutput = stdout
}
return stdout.toString().trim()
} else {
return branch;
}
}
catch (ignored) {
return null;
}
}
build.gradle
task showVersion << {
// Use inherited method
println 'VersionName: ' + getVersionName()
}
Sans le format ext.method (), la méthode ne sera disponible que dans le fichier * .gradle déclaré. C'est la même chose avec les propriétés.
Vous pouvez définir des méthodes de la manière suivante:
// Define an extra property
ext.srcDirName = 'src/Java'
// Define a method
def getSrcDir(project) {
return project.file(srcDirName)
}
Vous trouverez plus de détails dans la documentation Gradle Chapitre 62. Organiser la logique de compilation
Un exemple avec un objet racine contenant des méthodes.
fichier hg.gradle:
ext.hg = [
cloneOrPull: { source, dest, branch ->
if (!dest.isDirectory())
hg.clone(source, dest, branch)
else
hg.pull(dest)
hg.update(dest, branch)
},
clone: { source, dest, branch ->
dest.mkdirs()
exec {
commandLine 'hg', 'clone', '--noupdate', source, dest.absolutePath
}
},
pull: { dest ->
exec {
workingDir dest.absolutePath
commandLine 'hg', 'pull'
}
},
]
fichier build.gradle
apply from: 'hg.gradle'
hg.clone('path/to/repo')