2014-09-03 2 views
5

В настоящее время я модернизирую нашу градиентную сборку, чтобы иметь файл libs/commons.gradle, содержащий много глобального материала. Мне нужно это из-за того, что различные ветви программного обеспечения разрабатываются параллельно, и мы хотели бы избежать распространения каждого изменения скриптового файла среди всех ветвей.Gradle: как я могу назвать 'def' из импортированного скрипта?

Так что я создал, что Lib файл и использовать "применяются с", чтобы загрузить его:

применяются с: 'Gradle/бойким/commons.gradle'

Внутри commons.gradle я определить функцию svnrevision:

...

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:

...

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'. 

...

Итак, мой запрос: Как я могу назвать подфункцию в градиенте, которая определена во включенном скрипте?

Любая помощь оценена!

ответ

3

От http://www.gradle.org/docs/current/userguide/writing_build_scripts.html:

13.4.1. Локальные переменные

Локальные переменные объявляются ключевым словом def. Они только видны в области, где они были объявлены. Локальные переменные являются признаком базового языка Groovy.

13.4.2. Дополнительные свойства

Все расширенные объекты в доменной модели Gradle могут содержать дополнительные пользовательских свойств. Это включает, но не ограничивается, проектами, задачами и наборами источников. Можно добавить дополнительные свойства, прочитать и установить через свойство ext объекта владельца. Альтернативно, блок ext может использоваться для одновременного добавления нескольких свойств.

Если вы объявляете его как:

ext.svnRevision = { 
... 
} 

и не изменить вызов, я ожидаю, что это будет работать.

+0

это работает для меня. большое спасибо! – gorefest