使用jenkins - gradle release将多个aar上传到Nexus

时间:2017-07-25 12:59:15

标签: gradle android-gradle aar gradle-plugin gradle-release-plugin

我需要上传多个模块项目生成的多个aar。我的项目结构如下。

Project Root
  |--Main app
  |--Sub-Module1
  |--Sub-Module2
  |--Sub-Module3

每个子模块生成aar文件,我需要将所有aars的发布版本上传到Nexus但是我不希望将apks上传到Nexus。我正在传递jenkins的所有nexus url和cred。

这是我的root build.gradle

release {
failOnCommitNeeded = false
failOnPublishNeeded = true
failOnSnapshotDependencies = true
failOnUnversionedFiles = false
failOnUpdateNeeded = true
revertOnFail = true
preCommitText = ''
preTagCommitMessage = '[Gradle Release Plugin] - pre tag commit: '
tagCommitMessage = '[Gradle Release Plugin] - creating tag: '
newVersionCommitMessage = '[Gradle Release Plugin] - new version commit: '
tagTemplate = '$version'
versionPropertyFile = './gradle.properties'
versionProperties = []
buildTasks = ['uploadAllArchives']
scmAdapters = [
        net.researchgate.release.GitAdapter
]
git {
    requireBranch = ''
  }
 }

 task ("uploadAllArchives") {
    doLast{
    println 'uploadAllArchives'
    subprojects.each { subProject->
        if(!subProject.name.contains('app') && !rootProject)
        it.uploadArchives.execute();
    }
  } 
}

发布 - 的build.gradle

apply plugin: 'maven'

 uploadArchives {
       repositories {
        mavenDeployer {
            repository(url: (project.hasProperty('repoUrl') ? repoUrl 
               : sonatypeRepo)) {
                authentication(userName: sonatypeUsername, password: 
                 sonatypePassword)
                pom.groupId = sonatypeGroupID
                pom.artifactId = project.name
                pom.version = version

               }
           }
        }
     }

子模块build.gradle:

apply from: '../publish-build.gradle'

gradle clean build uploadArchives这会成功将我的所有快照aars上传到Nexus。

gradle release - 它已成功完成发布,但未向Nexus上传任何内容但是构建成功。

你能帮我解决一下我错过的事吗?

2 个答案:

答案 0 :(得分:0)

你不能在android项目中使用普通的maven插件。你必须使用这个:https://github.com/dcendents/android-maven-gradle-plugin

您的uploadAllArchives任务也是多余的,只需从根项目运行gradle uploadArchives

答案 1 :(得分:0)

你可以通过添加

来实现
afterReleaseBuild.dependsOn project.getSubprojects().collect({it.getTasks().getByName("uploadArchives")})

如果您想为所有子项目上传它,那么它会这样做但如果你的根项目也产生了一个工件,你必须用getAllprojects()替换getSubprojects()