2016-10-13 4 views
1

Gradle에서 빌드 이후에 실행할 작업을 정의하기 쉽습니다.빌드 후 Gradle 복사 작업

task finalize1 << { 
    println('finally1!') 
} 
build.finalizedBy(finalize1) 

예상대로 작동합니다. 하지만 이제는 복사 작업을 끝내고 싶습니다.

task finalize (type: Copy) { 
    def zipFile = file('data/xx.zip') 
    def outputDir = file("data/") 
    println('Unzip..') 
    from zipTree(zipFile) 
    into outputDir 
} 
build.finalizedBy(finalize) 

이것은 더 이상 작동하지 않습니다. 빌드 시작 부분에 "압축 해제"출력이 표시됩니다 (압축 해제가 필요합니다).

Unzip.. 
:clean 
:compileJava 
:processResources 
:classes 
:findMainClass 
:jar 
:bootRepackage 
:assemble 
... 

<<

이 보인다 트릭을 수행하지만 난이 두 가지를 병합 할 수있는 방법?

답변

2

꼭 그렇습니다. 빌드 시작 부분에 Unzip...이 표시되지만 그 순간에 Gradle이 작업을 실행한다는 것을 의미하지는 않습니다.

Gradle에서 복사 작업을 구성하기 시작할 때이 메시지가 콘솔에 인쇄됩니다. 입력 및 출력에 경로를 추가합니다. 실제 실행은 빌드 후에 수행됩니다.

task finalize (type: Copy) { 
    doLast { println 'running now' } 
    ... 
} 

코드 doLast 내부 블록이 빌드 후 실행됩니다 : 당신이 doLast 폐쇄를 사용할 수 있는지 확인합니다.

P. 나머지 작업 코드 (from zipTree(zipFile) 등)를 doLast 클로저 안에 옮기지 마십시오. 작동하지 않습니다.

+0

doAfter를 추가해도 작동하지 않습니다.'org.gradle.api.tasks.Copy 유형의 'unzipTestData'태스크에서 인수 [build_92jecjaieetrt4v2cwwz3ik0j $ _run_closure6 $ _closure9 @ 41b0297c]에 대한 메소드 doAfter()를 찾을 수 없습니다. – DerM

+0

@DerM 죄송합니다. 이름을 잊어 버렸습니다. doLast 라 불리는 것입니다. doAfter가 아닙니다. – AdamSkywalker