2016-11-09 12 views
1

gradles가 종속성을 해결하기 전에 추가 소스를 가져 와서 설정하는 gradle 작업을 실행하고 싶습니다.종속성을 해결하기 전에 gradle 작업을 실행하십시오.

build.gradle에는 하위 프로젝트의 소스 코드를 가져 오는 작업이 있습니다. 하위 프로젝트가 종속성의 일부이기 때문에 Gradle이 종속성을 해결하기 전에 작업을 실행해야합니다. 이 작업은 원격 저장소에서 소스를 가져 와서 몇 개의 build.gradle 파일을 대체하여 빌드를 가능하게합니다.

  • 내가 작업을 실행 : 지금은 어떻게됩니까

    는 점이다.

  • Gradle은 실제로 작업을 실행하기 전에 종속성을 해결하려고합니다.
  • 종속성 중 하나에 하위 프로젝트 (내 태스크가 가져 오는 소스)가 필요하기 때문에 실패합니다.

물론 의존성을 해결하는 것은 "구성"빌드 단계의 일부이므로 작업을 실행하는 이유는 분명합니다. 문제는 전에 실행하는 방법 입니다.

물론 gradle 작업을 별도의 bash 스크립트로 바꾸고 gradle이 수동으로 실행하기 전에 작업을 수행 할 수 있습니다. 그러나, 그게 내가 gradles과 bash 스크립트 (버전 이름과 자식 태그 이름과 같은)에 몇 가지 변수를 복제한다는 것을 의미합니다. 이러한 변수는 gradle에서 다른 목적으로 사용되며 두 곳에서 사용하면 좋지 않습니다. 그 중 하나는 피하고 싶습니다. 그 중 하나는 bash 스크립트를 사용하면 처음부터 끝까지 빌드를 수행 할 때 gradle이 실패 함을 의미합니다 ...

+1

프로젝트 레벨 build.gradle과 앱 모듈의 build.gradle을 gradle 콘솔과 모니터에서받은 오류 출력과 함께 게시하십시오. – apelsoczi

답변

0

처음으로 정확하지 않은 종속성이있는 부분은입니다. "구성"단계. FileCollection의 지연 평가를 사용하면 실제로 실행 단계에서 해결됩니다. 구성은 처음으로 resolve()이 호출 될 때 해결됩니다. 구성을 해결하는 방법은 javadoc을 참조하십시오.

dependencies { 
    // this is lazy evaluated 
    compile fileTree(dir: "$buildDir/dynamicJars", include: "*.jar") 
} 

task getDynamicJars(type: Copy) { 
    from zipTree('path/to/somefile.zip') 
    into "$buildDir/dynamicJars" 
} 

compile.dependsOn getDynamicJars 
: AFAIK

당신은 같은 것을 할 수 있습니다 (나는이 사실 인 경우 리팩토링 제안) 핵심 Gradle을 코드는 "구성"단계에서 구성을 해결하지 않지만 사용자 정의 코드는이 발생할 수 있습니다