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 автоматически вызывается каждый раз, когда сборка выполняется успешно.