2014-03-27 6 views
1

나는 많은 하위 프로젝트를 포함하고있는 다중 프로젝트 빌드를 가지고있다.gradle multi-project : ordering/dependencies

include ':common' 
project(':common').projectDir = new File(rootDir, 'android-common/common') 

include ':setup' 
project(':setup').projectDir = new File(rootDir, 'android-setup/setup') 
... 

마스터 프로젝트 수준에서 주문 (또는 종속성)을 추가하고 싶습니다. 위의 예에서는 setup 전에 항상 common을 작성하고 싶습니다. 그것 같다 나는 setup:compile (또는 빌드 작업이 명명 된)에 대한 참조를 얻고 추가 ​​종속성을 추가하는 것과 같은 것을 원한다.

tasks[':setup'].dependsOn += tasks[':common:install'] 

분명히 작동하지 않습니다. 이것이 가능한가?

EDIT : 조금 더 자세히. :common의 결과는 maven 이슈를 설치 한 다음 :setup에 의해 사용됩니다. 그래서 그들 사이의 의존성은 부드럽습니다. 그러나 일반적인 dev-cycle에서 우리는 여전히 :common을 먼저 만들고 싶습니다. 당신은 프로젝트 종속성

project(':setup') { 
    dependencies { 
    compile project(':common') 
    } 
} 

편집을 사용하려면 같은

답변

2

은 나에게 소리 : 당신이 당신의 부모 build.gradle에서 프로젝트 간 작업 종속성을 선언 할 것으로 보인다.

tasks.getByPath(":setup:compile").dependsOn(":common:install") 

이렇게하면 설치 프로젝트가 평가/구성됩니다. 이 어떤 이유로 문제가 발생하는 경우, 당신은 당신이이 구조에 독립적으로 설치 프로젝트를 구축하려는 경우가 -u 명령 줄 옵션을 사용해야 할 것이라고 평가 청취자에게

project("setup").afterEvaluate { setup -> setup.compile.dependsOn ":common:install } 

또한 메모를 사용할 수도 있습니다.

+0

문제는 설치가 이제 메이븐 레포 의존성을 통해 일반적인 것에 달려 있으며, 나는 그것을 바꿀 수 없다는 것입니다. 모든 변경 사항은 마스터 프로젝트 레벨에서 수행되어야합니다. 설치 프로그램은 일반적인 것보다 다른 git repo에 있습니다. 구조는 maven repos를 통해 "소프트"종속성을 가진 많은 repos를 가지고 있지만, 우리는 하나의 gradle 프로젝트로 이들을 개발하고 싶습니다. –

+0

왜 Maven 종속성을 사용해야하는지 설명 할 수 있습니까? 프로젝트 종속성을 사용하면 게시 할 때 올바른 종속성 메타 데이터가 생성되어야합니다. –

+0

각각의 repos는 독립적으로 빌드해야하기 때문에. –

관련 문제