プロジェクトの一環として、ディレクトリからファイルを読み取り、ビルドスクリプトでこれらすべての操作を行う必要があります。各ファイルの操作は同じです(いくつかのSQLクエリを読み取り、実行します)。私はそれが反復的な仕事であり、メソッド内に記述する方が良いと思います。私はgradleが初めてなので、それがどうあるべきかわかりません。助けてください。
以下に示す1つのアプローチ:
ext.myMethod = { param1, param2 ->
// Method body here
}
これは、プロジェクトスコープに対して作成されることに注意してください。プロジェクトでグローバルに利用可能。myMethod(p1, p2)
と同等のproject.myMethod(p1, p2)
を使用して、ビルドスクリプトのどこからでも次のように呼び出すことができます。
メソッドは、タスク内など、さまざまなスコープで定義することもできます。
task myTask {
ext.myMethod = { param1, param2 ->
// Method body here
}
doLast {
myMethod(p1, p2) // This will resolve 'myMethod' defined in task
}
}
他のファイル* .gradleでメソッドを定義している場合-ext.method()はプロジェクト全体でアクセス可能にします。たとえば、ここに
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()
}
Ext.method()formatがない場合、メソッドは宣言された* .gradleファイル内でのみ使用可能になります。これはプロパティでも同じです。
次の方法でメソッドを定義できます。
// Define an extra property
ext.srcDirName = 'src/Java'
// Define a method
def getSrcDir(project) {
return project.file(srcDirName)
}
詳細については、gradleのドキュメントを参照してください 第62章ビルドロジックの整理
メソッドを含むルートオブジェクトの例。
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'
}
},
]
build.gradleファイル
apply from: 'hg.gradle'
hg.clone('path/to/repo')