2010-04-02 3 views
41

우리는 여러 독립 빌드를 가지고 있습니다 (각 독립 빌드는 다중 프로젝트 빌드입니다). 주요 빌드 스크립트는 하위 프로젝트에 의해 재사용되는 일련의 공통 태스크가 있고 독립 빌드간에 많은 반복이 있기 때문에 상당히 커집니다.Gradle 빌드의 공통 부분을 분할/제거하는 방법이 있습니까

  1. 있는 방법 작은 파일로 다른 독립적에서 빌드의 일부를 재사용 할 수
  2. 하는 방식의 기본 빌드 파일 을 분할

는 무엇입니까 빌드 : 우리가 찾고있는 것은 Gradle에서이를 달성하는 가장 좋은 방법은 무엇입니까?

답변

41

Gradle 0.9를 사용하면 다른 빌드 스크립트에서 빌드 스크립트를 가져올 수 있습니다. 다음을보십시오 : Configuring the project using an external build script. 기본적으로 그것은 apply from: 'other.gradle'입니다.

'from'매개 변수는 URL 일 수 있기 때문에 공유 스크립트를 어딘가에서 HTTP (예 : Subversion 저장소)를 통해 사용할 수 있도록 만들고 여러 빌드에서 가져올 수 있습니다.

+0

감사합니다. 0.8이 그 기능을 지원한다고 생각하십니까? –

+0

아니요, 0.9의 새로운 기능입니다. –

+0

grrrr, 링크가 끊어졌으며, 지금 당장 자신을 파고 드십시오. –

25

내가 찾은 해결책은 사용자가 other.gradle 파일에있는 것들을 매핑하는 것을 의미합니다. 당신의 build.gradle 파일에 다음

def getVersionName = { -> 
    def stdout = new ByteArrayOutputStream() 
    exec { 
     commandLine 'git', 'describe', '--tags' 
     standardOutput = stdout 
    } 
    return stdout.toString().trim() 
} 
ext{ 
    VERConsts = [:] 
    VERConsts['NAME'] = getVersionName() 
    VERConsts['NAME_CALL'] = getVersionName 
} 

:

apply from: 'other.gradle' 
// ... 
android { 
    defaultConfig { 
     versionName VERConsts['NAME_CALL']() 
     // or 
     versionName VERConsts['NAME'] 
    } 
} 

는 다음, versionName는 호출 결과를해야합니다. 참고

:

  • VERConsts['NAME'] = getVersionName()getVersionName()를 호출하고 그 결과를 저장합니다. 예 : 스크립트에서 사용 versionName VERConsts['NAME'] 그러면 저장된 값이 지정됩니다.
  • VERConsts['NAME_CALL'] 대신 함수에 대한 참조가 저장됩니다. 실제로 함수를 호출 전자는 같은 값 발생합니다

후자는 서로 다른 값을 초래할 수도 있지만 스크립트를 통해 할당되는은 (예를 들어, 누군가가 또 다른 변수 밀어 경우에 결과를 할당합니다 스크립트에서 VERConsts['NAME_CALL']() 사용 스크립트가 실행되는 동안 버전).

+0

프로젝트 사이에 스크립트 도우미 메서드를 공유하는 다른 답변보다 유용하다는 것을 알았습니다. –

+0

이 대답은 저에게 가장 도움이되었습니다. 감사! –

+0

비 안드로이드 예제를 줄 수 있습니까? versionName은 VERConsts [ 'NAME_CALL']()입니까? 어떻게 깨끗한 자바 gradle 프로젝트에서 그것을 실행하려면? – user3871754

관련 문제