build.gradle에서 사용자 지정 메서드를 정의하고 호출하는 방법
내 프로젝트의 일부로 디렉토리에서 파일을 읽고 빌드 스크립트에서이 모든 작업을 수행해야합니다. 각 파일에 대해 작업은 동일합니다 (일부 SQL 쿼리를 읽고 실행). 반복적 인 작업이고 메서드 내부에 작성하는 것이 좋습니다. 나는 gradle을 처음 사용하기 때문에 그것이 어떻게되어야하는지 모르겠습니다. 도와주세요.
다음은 한 가지 접근 방식입니다.
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 () 형식이 없으면 메서드가 선언 된 * .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')
참고 URL : https://stackoverflow.com/questions/27777591/how-to-define-and-call-custom-methods-in-build-gradle
'Program Tip' 카테고리의 다른 글
Bash에서 dirname의 마지막 부분을 얻는 방법 (0) | 2020.11.23 |
---|---|
IPython 노트북에 웹 페이지에 대한 링크 삽입 (0) | 2020.11.23 |
오른쪽에 카운터가있는 NavigationView 메뉴 항목 (0) | 2020.11.23 |
루비 메서드에 여러 인수를 배열로 전달하는 방법은 무엇입니까? (0) | 2020.11.23 |
VB.NET에서 문자열을 Enum 값으로 구문 분석 (0) | 2020.11.23 |