Android多模块,带有maven存储库的风味

时间:2015-04-30 10:00:59

标签: android maven gradle

我一直试图将项目上传到maven存储库失败。这是我的项目结构:

_root
  |_ lib1 (aar)
  |_ lib2 (aar) 
  |_ javalib (jar)
  • lib1依赖于lib2
  • lib2依赖于javalib
  • lib1和lib2有两种风格(intg和prod)

问题是当我启动uploadArchives任务时,我没有创建pom.xml。 这似乎是由于我的口味(当我删除口味它工作正常),我无法弄清楚如何解决这个问题。 我真的需要使用口味...欢迎任何帮助;)

这是我的build.gradle文件:

root:

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.1.0'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

ext.versionName = "$System.properties.version"

configure(subprojects) {

    apply plugin: 'maven'

    group = 'com.test.build'
    version = project.versionName

    uploadArchives {
        repositories {
            mavenDeployer {
                repository(url: "http://localhost:8081/content/repositories/test/") {
                    authentication(userName: "admin", password: "admin123")
                }
            }
        }
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

lib1:

apply plugin: 'com.android.library'

android {
    publishNonDefault true

    compileSdkVersion 22
    buildToolsVersion "22.0.1"

    defaultConfig {
        minSdkVersion 15
        targetSdkVersion 22
        versionCode 1
        versionName project.versionName
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

    productFlavors {
        prod{}
        intg{}
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    intgCompile project(path: ':lib2', configuration: 'intgRelease')
    prodCompile project(path: ':lib2', configuration: 'prodRelease')
}

lib2:

apply plugin: 'com.android.library'

android {
    publishNonDefault true

    compileSdkVersion 22
    buildToolsVersion "22.0.1"

    defaultConfig {
        minSdkVersion 15
        targetSdkVersion 22
        versionCode 1
        versionName project.versionName
    }
    buildTypes {
        debug {
        }
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

    productFlavors {
        prod{}
        intg{}
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile project(path: ':javalib')
}

javalib:

apply plugin: 'java'

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
}

2 个答案:

答案 0 :(得分:4)

我终于找到了我的问题的答案: 这是不可能的,但有一天可能会这样做: 看到有关的文档: http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Library-Publication

我用这个解决方案解决了这个问题:

// default publication is production which will be published without env name
    publishNonDefault true
    defaultPublishConfig "productionRelease"
    if (android.productFlavors.size() > 0) {
        android.libraryVariants.all { variant ->
            // Publish a main artifact, otherwise the maven pom is not generated
            if (android.publishNonDefault && variant.name == android.defaultPublishConfig) {
                def bundleTask = tasks["bundle${name.capitalize()}"]
                artifacts {
                    archives(bundleTask.archivePath) {
                        classifier null
                        builtBy bundleTask
                    }
                }
            }
        }
    }

我对此不满意,但它现在可以完成这项工作......

答案 1 :(得分:0)

我花了很多时间发现为什么我的Android项目没有将我的模块上传到Maven。问题是因为我没有在文件defaultPublishConfig的{​​{1}}括号内设置android {}。下面的代码段是我解决问题的方式。您需要设置要发布到Maven的风味(访问Android Studio中的构建变体标签以查看所有风味名称):

build.gradle