2013-12-22 6 views
2

classpath 안에있는 jar 파일에서 buildDir으로 특정 파일을 복사하고 싶습니다. 사용자 정의 gradle 플러그인을 작성합니다. 나는 샌드 박스 프로젝트에 주위 재생이 솔루션 작업 있어요 :사용자 정의 gradle 플러그인의 jar 파일 복사

task copyFile(type: Copy) { 
      from zipTree(project.configurations.compile.filter{it.name.startsWith('spring-webmvc')}.singleFile) 
      include "overview.html" 
      into project.buildDir 
     } 

를하지만, 경우에 내 플러그인에 복사 :

* What went wrong: 
A problem occurred evaluating root project 'gradle-springdoc-plugin-test'. 
> Could not find method zipTree() for arguments [/Users/blackhacker/.gradle/caches/artifacts-26/filestore/org.springframework/spring-webmvc/4.0.0.RELEASE/jar/a82202c4d09d684a8d52ade479c0e508d904700b/spring-webmvc-4.0.0.RELEASE.jar] on task ':copyFile'. 

의 결과 : 나는 오류가 발생했습니다

project.task(type: Copy, "copyFile") { 
      from zipTree(project.configurations.compile.filter{it.name.startsWith('spring-webmvc')}.singleFile) 
      include "overview.html" 
      into project.buildDir 
     } 

println project.configurations.compile.filter{it.name.startsWith('spring-webmvc')}.singleFile.class 

class java.io.File 

내가 뭘 잘못하고 있니?

답변

4

빌드 스크립트와 달리 플러그인은 내재적 인 project 컨텍스트를 갖지 않습니다 (단 하나주지 않는 한). 따라서 당신은 project.task보다는 task, project.zipTree보다는 zipTree, project.file보다는 file을 사용해야합니다 등

PS : 귀하의 경우, 그것은 검색 연기 (중괄호 주) project.zipTree { ... }를 사용하는 것이 중요 Zip 콘텐츠가 실제로 요청 될 때까지 그렇지 않으면 각 빌드 호출 (결코 실행하지 않는 파일도 copyFile)이 느려지고 동일한 빌드에서 파일을 생성하는 경우 빌드가 실패하기도합니다 (파일이 추가되기 전에 구성이 해결되기 때문에).

+0

Thx Peter! 당신이 gradle 질문에 대한 원 스톱 ressource 것 같아요 :-) 나는 여기에''project.afterEvaluate'' 블록을 추가했습니다. 그렇지 않으면'''당신은 미해결 상태가 아닌 구성을 변경할 수 없습니다! ''메시지. – thilko

+0

그럴 필요는 없습니다. 중괄호를 사용하지 않은 것처럼 들립니다. –

+0

네, 맞습니다! – thilko

관련 문제