2014-10-13 2 views
1

У меня есть следующие в моей build.gradle:Как я могу сделать uploadArchives зависимым от другой задачи?

afterEvaluate { project -> 
    uploadArchives { 
    repositories { 
     mavenDeployer { 
     configuration = configurations.deployerJars 
     pom.packaging = "aar" 
     pom.groupId = project.CORE_GROUP 
     pom.version = project.CORE_VERSION_NAME 

     repository(url: "scp://" + project.CORE_MAVEN_URL) { 
      authentication(userName: project.uploadUsername, privateKey: project.uploadKeyFile) 
     } 
     } 
    } 
    } 
} 

И я хочу быть зависимым от следующей задачи:

task checkProperties << { 
    if (!project.hasProperty('uploadUsername')) { 
    throw new RuntimeException("Couldn't find uploadUsername property. Did you forget to specify it in ~/.gradle/gradle.properties?") 
    } else if (!project.hasProperty('uploadKeyFile')) { 
    throw new RuntimeException("Couldn't find uploadKeyFile property. Did you forget to specify it in ~/.gradle/gradle.properties?") 
    } 
} 

Как я могу добиться этого? Если я пишу следующее:

afterEvaluate { project -> 
    uploadArchives(dependsOn: checkProperties) { 
    repositories { 
     mavenDeployer { 
     configuration = configurations.deployerJars 
     pom.packaging = "aar" 
     pom.groupId = project.CORE_GROUP 
     pom.version = project.CORE_VERSION_NAME 

     repository(url: "scp://" + project.CORE_MAVEN_URL) { 
      authentication(userName: project.uploadUsername, privateKey: project.uploadKeyFile) 
     } 
     } 
    } 
    } 
} 

Тогда я получаю следующее сообщение об ошибке:

FAILURE: Build failed with an exception. 

* Where: 
Build file '/Users/scottjohnson/Source/core-android/core/build.gradle' line: 61 

* What went wrong: 
A problem occurred configuring project ':core'. 
> org.gradle.api.internal.MissingMethodException: Could not find method mavenDeployer() for arguments [build_42edqo[email protected]30b8afce] on repository container. 

* Try: 
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. 

BUILD FAILED 

Total time: 7.68 secs 

Кстати, почему я хочу сделать это в том, что прямо сейчас, если я просто поставить код, который проверяет свойства в задаче uploadArchives, то даже если я запустил ./gradlew clean build, он проверяет свойства (которые я не хочу выполнять на моем сервере сборки, поскольку у него нет разрешения на загрузку файлов). Таким образом, метод, который будет проверять свойства только при выполнении задачи uploadArchives, также будет приемлемым.

+1

Почему вы вызываете 'UploadArchives' сразу после' projectEvaluate' увольняют? Разве это не должна быть самостоятельная задача? – Opal

+0

@Opal Я делаю это, потому что, если я не заключу его в это закрытие, тогда я получаю исключение неопределенного свойства: '> Не удалось найти свойство 'uploadUsername' в проекте ': core'.' – jwir3

ответ

0

я был в состоянии понять это частично на основе @ опала комментарий:

def checkProperties() {               
    if (!project.hasProperty('uploadUsername')) {         
    throw new RuntimeException("Couldn't find uploadUsername property. Did you forget to specify it in ~/.gradle/gradle.properties?") 
    } else if (!project.hasProperty('uploadKeyFile')) {       
    throw new RuntimeException("Couldn't find uploadKeyFile property. Did you forget to specify it in ~/.gradle/gradle.properties?") 
    }                    
}                    

uploadArchives {                 
    repositories {                 
    mavenDeployer {                
     configuration = configurations.deployerJars        
     pom.packaging = "aar"              
     pom.groupId = project.CORE_GROUP           
     pom.version = project.CORE_VERSION_NAME         
     repository(url: "scp://" + project.CORE_MAVEN_URL) {      
     }                   
    }                   
    }                    
}                    

// We need to check to make sure the properties are available before we execute 
// uploadArchives.                
gradle.taskGraph.beforeTask { Task aTask ->          
    if (aTask == uploadArchives) {             
    checkProperties()               
    aTask.repositories.mavenDeployer.repository(url: "scp://" + project.CORE_MAVEN_URL) { 
     authentication(userName: project.uploadUsername, privateKey: project.uploadKeyFile) 
    }                   
    }                    
} 
+0

Итак, похоже, это не работает так хорошо, как я думал ... он все еще дает мне ошибку, если я пытаюсь запустить './gradlew clean build', то есть даже если' uploadArchives' не запускается, он проверяет свойства. – jwir3

+0

Это произойдет потому, что весь код запускается на этапе конфигурации сборки. Не исполнение. – Opal

1

Может быть, вы можете попробовать что-то вроде:

apply plugin: 'java' 

def uploadUsername = project.hasProperty('uploadUsername') ? project['uploadUsername'] : '' 
def uploadKeyFile = project.hasProperty('uploadKeyFile') ? project['uploadKeyFile'] : '' 

uploadArchives { } 

task checkProperties << { 
    if (!uploadUsername) { 
     throw new RuntimeException("Couldn't find uploadUsername property. Did you forget to specify it in ~/.gradle/gradle.properties?") 
    } else if (!uploadKeyFile) { 
     throw new RuntimeException("Couldn't find uploadKeyFile property. Did you forget to specify it in ~/.gradle/gradle.properties?") 
    } 
} 

uploadArchives.dependsOn(checkProperties) 

В начале оба свойства считываются и присвоенного двух переменных. Если какой-либо из них не существует, будет назначено простое пустое значение. Он не мешает потоку сборки. Затем объявляется uploadArchives в зависимости от checkProperties. Если он вызывается, то checkProperties будет запущен и генерирует исключение, если какая-либо из объявленных переменных пуста.

+0

Я получаю исключение, если я добавьте '(dependsOn: checkProperties)' в конец задачи 'uploadArchives'. – jwir3

+1

Обновлен ответ. – Opal

+0

Итак, это все еще не совсем правильно, потому что 'checkProperties' все равно будет выполняться во время оценки (т. Е. Когда я запускаю' ./gradlew clean build', и у меня нет определенных переменных, он генерирует исключение. собственный ответ выше, чтобы указать метод, который работал для меня. – jwir3

Смежные вопросы