Android gradle uploadArchives при построении
у меня uploadArhives
в репозиторий Maven .aar
публикации.
но я должен бежать gradlew uploadArhives
из консоли все время, как код, чтобы заставить его вызывать с каждой сборкой или с выпуском сборки?
uploadArchives {
repositories {
mavenDeployer {
def credentials = [
userName: NEXUS_USERNAME,
password: NEXUS_PASSWORD
]
repository(url: MAVEN_REPO_URL, authentication: credentials)
pom.artifactId = 'aaa'
pom.version = version
pom.packaging = 'aar'
pom.groupId = 'bbb'
}
}
}
редактировать:
как я думаю, мы можем определить функцию:
def uploadToMaven = {
uploadArchives
}
но как выполнить его с каждой сборкой?
2 ответов
у меня сложный проект со многими модулями и одним основным приложением. Я добавил "uploadArchives" на двух из этих модулей (потому что это библиотеки android). Таким образом, я могу публиковать свои библиотеки на Maven, просто запустив задачу uploadArchives из моего основного приложения или используя gradle и называя эту задачу "uploadArchives".
Вы можете использовать это в вашу сборку.gradle (библиотеки, которую вы хотите опубликовать) " build.finalizedBy (uploadArchives)".
для пример:
android {
compileSdkVersion 23
buildToolsVersion "23.0.2"
defaultConfig {
minSdkVersion 17
targetSdkVersion 23
versionCode 2
versionName "2.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}
lintOptions {
abortOnError false
}
}
build.finalizedBy(uploadArchives)
task wrapper(type: Wrapper) {
gradleVersion = "2.8"
}
dependencies {
compile project(':spfshared')
compile 'com.google.code.gson:gson:2.4'
}
//task for Sonatype Nexus OSS
uploadArchives {
repositories {
mavenDeployer {
repository(
url: "${nexusUrl}/content/repositories/releases") {
authentication(userName: nexusUsername, password: nexusPassword)
}
snapshotRepository(
url: "${nexusUrl}/content/repositories/snapshots") {
authentication(userName: nexusUsername, password: nexusPassword)
}
pom.version = "2.0.0.1"
pom.artifactId = "spflib"
pom.groupId = "it.polimi.spf"
}
}
}
после каждой сборки, uploadArchives будет запускаться.
Я пробовал это решение, и оно работает.
Я также попробовал некоторые решения с помощью " build.dependsOn myTaskName " без успеха. Если вы хотите, вы можете попробовать, но на моем AndroidStudio первое решение работает.
PS: Я тестировал свое решение с помощью команды "gradlew-q build" , а также запускал специально задачу "build" из моего основного модуля в Android Studio (это мой основной приложение.)
Если вы хотите вызвать " uploadArchives "в каждом выпуске, просто замените" build " задачей выпуска.
обновление: Я пробовал также с этими codelines:
defaultTasks 'uploadArchives'
clean.finalizedBy(uploadArchives)
assembleDebug.finalizedBy(uploadArchives)
assembleRelease.finalizedBy(uploadArchives)
но иногда они называют "uploadArchives" много раз, и я думаю, что это не очень хорошая идея.
то, что вы просите очень сложно... Я пробовал целый час:)
просто добавьте эту строку в свою сборку.Gradle в:
build.finalizedBy(uploadArchives)
это создает зависимость задачи между задачей сборки и задачей uploadArchives, так что uploadArchives автоматически вызывается каждый раз, когда сборка выполняется успешно.