2014-09-03 1 views
5

현재 전역 도구가 많은 libs/commons.gradle 파일을 갖기 위해 gradle 빌드를 모듈화하고 있습니다. 나는 병렬로 개발 된 소프트웨어의 다양한 브랜치들 때문에 이것을 필요로하고 모든 브랜치들간에 모든 스크립트 파일 변경을 피하기를 원한다. commons.gradle 내부 'Gradle을/입심/commons.gradle'Gradle : 가져온 스크립트에서 'def'를 어떻게 호출 할 수 있습니까?

나는 svnrevision 함수를 정의 :

부터 적용

는 그래서 "에서 적용"사용 LIB 파일이로드 것을 만들어 :

...

def svnRevision = { 
    ISVNOptions options = SVNWCUtil.createDefaultOptions(true); 
    SVNClientManager clientManager = SVNClientManager.newInstance(options); 
    SVNStatusClient statusClient = clientManager.getStatusClient(); 
    SVNStatus status = statusClient.doStatus(projectDir, false); 
    SVNRevision revision = status.getCommittedRevision(); 
    return revision.getNumber().toString(); 
} 

...

내가 전화 한거야 내 포함 build.gradle에서 g 기능 :

...

task writeVersionProperties { 
    File f = new File(project.webAppDirName+'/WEB-INF/version.properties'); 
    if (f.exists()) { f.delete(); } 

    f = new File(project.webAppDirName+'/WEB-INF/version.properties'); 
    FileOutputStream os = new FileOutputStream(f); 
    os.write(("version="+svnRevision()).getBytes()); 
    os.flush(); 
    os.close(); 
} 

...

는하지만에 결국 :

...

FAILURE: Build failed with an exception. 

    * Where: 
    Build $PATH_TO/build20.gradle 

    * What went wrong: 
    A problem occurred evaluating root project 'DEV_7.X.X_GRADLEZATION'. 
    > Could not find method svnRevision() for arguments [] on root project 'DEV_7.X.X_GRADLEZATION'. 

...

내 queston은입니다. 포함 된 스크립트에 정의 된 gradle의 하위 함수를 호출하려면 어떻게해야합니까?

도움을 주셨습니다. http://www.gradle.org/docs/current/userguide/writing_build_scripts.html에서

답변

3

:

13.4.1. 로컬 변수

로컬 변수는 def 키워드로 선언됩니다. 그것들은 선언 된 범위 내에서만 볼 수있는 입니다. 지역 변수 은 근본적인 Groovy 언어의 기능입니다.

13.4.2. 추가 등록 정보

Gradle 도메인 모델의 모든 향상된 개체는 사용자 정의 속성을 추가로 저장할 수 있습니다. 여기에는 프로젝트, 작업 및 원본 세트가 포함되며 이에 국한되지는 않습니다. 추가 속성을 추가 할 수 있으며 을 읽고 소유 객체의 ext 속성을 통해 설정하십시오. 또는 ext 블록을 사용하여 한 번에 여러 속성을 추가 할 수 있습니다. 당신이로 선언하는 경우

:

ext.svnRevision = { 
... 
} 

하고 통화를 변경하지 마십시오, 나는 그것이 작동합니다 기대합니다.

+0

이 작품은 나를 위해. 고마워요! – gorefest