zoukankan      html  css  js  c++  java
  • gradle配置flavors上传nexus服务器

    分拆代码的过程中需要把核心代码编译成一个库上传到内部maven服务器上,所以研究了一下上传私库的方法。

    首先拆分的是工具类库,这个库和java的库类似,没有配置flavors,所以按照网上通用的方法引入maven插件就可以了。

    pply plugin: 'com.android.library'
    
    android {
    
    }
    dependencles{ 
    
    }
    apply plugin: 'maven'
    
    version = '1.0.2-SNAPSHOT'
    
    uploadArchives {
        repositories {
            mavenDeployer {
                repository(url: "http://11.2.3.71:8081/repository/core-release/") {
                    authentication(userName: "admin", password: "admin123")
                    pom.groupId = "com.example.baselib"
                    pom.artifactId = "myLib"
                }
                snapshotRepository(url: "http://11.2.3.71:8081/repository/core-dev/") {
                    authentication(userName: "admin", password: "admin123")
                    pom.groupId = "com.example.baselib"
                    pom.artifactId = "myLib"
                }
            }
        }
    }
    

      然后执行./gradlew upload,或者在android studio中点开gradle窗口,一般在右边框的上面。找到对应模块,执行upload就行了。

    然后这种方法对于有flavors的库没有效果,我觉得是我配置的不对,然后我又找到了另一种方法解决有flavors的android库,这回不用maven插件了,用maven-publish插件,具体方法是这样的:

    apply plugin: 'maven-publish'
    
    publishing {
        publications {
            android.libraryVariants.all { variant ->
                variant.outputs.each { output ->
                    create("${variant.name.capitalize()}", MavenPublication) {
                        groupId "app.android"
                        artifactId "core-${output.baseName}"
                        version '1.0.0'
    
                        artifact(output.outputFile)
                    }
                }
            }
        }
        repositories {
            maven {
                name 'artifactory'
                url "http://11.2.3.71:8081/repository/ruixin-release/"
                credentials {
                    username = "admin"
                    password = "admin123"
                }
            }
        }
    }
    

      它会把所有的组合全部上传上去,但是它有一个缺陷,直接在gradle框中点击publish是没有效果的,它需要我们首先执行build,然后再点击发布的按纽publish。

    天这里任务完成了一大半,还有一个小问题,你发布的这个库可能信赖了很多maven上的其它库,所以自己的库发布的时候要告诉用的人它所有信赖的库,于是需要一个收集信赖并写入pom文件的方法:

    pom.withXml {
                            def node = asNode()
    
                            // ugly hack to set the packaging property in the POM as 'aar'
                            ((NodeList) node.get('packaging')).get(0).value = 'aar'
    
                            def dependenciesNode = node.appendNode('dependencies')
    
                            def cl = { Dependency dep ->
    //                            if (dep.group == null || dep.version == null || dep.name == null || dep.name == "unspecified")
                                if (dep.name == null || dep.name == "unspecified")
                                    return // ignore invalid dependencies
    
                                def dependencyNode = dependenciesNode.appendNode('dependency')
                                dependencyNode.appendNode('groupId', dep.group)
                                dependencyNode.appendNode('artifactId', dep.name)
                                dependencyNode.appendNode('version', dep.version)
    
                                if (!dep.transitive) {
                                    // If this dependency is transitive, we should force exclude all its dependencies them from the POM
                                    def exclusionNode = dependencyNode.appendNode('exclusions').appendNode('exclusion')
                                    exclusionNode.appendNode('groupId', '*')
                                    exclusionNode.appendNode('artifactId', '*')
                                } else if (!dep.properties.excludeRules.empty) {
                                    // Otherwise add specified exclude rules
                                    def exclusionNode = dependencyNode.appendNode('exclusions').appendNode('exclusion')
                                    dep.properties.excludeRules.each { ExcludeRule rule ->
                                        exclusionNode.appendNode('groupId', rule.group ?: '*')
                                        exclusionNode.appendNode('artifactId', rule.module ?: '*')
                                    }
                                }
                            }
    
                            // List all dependencies and write to POM
                            configurations.api.getAllDependencies().each cl
                            configurations.implementation.getAllDependencies().each cl
                        }
    

      这段代码要放到任务的创建代码中,也就是

    artifact(output.outputFile)

    下面另起一行,反正是一个大括号中就行。
    还有一个要注意的地方,引用库的代码不会自动使用你更新的库,除非你的版本号变了,并且你修改了gradle文件使用新版本号的库。在不改变版本的前提下,使用新发布的库需要先把先前的缓存清理掉

    ./gradlew build --refresh-dependencies
  • 相关阅读:
    求CRC校验和的低位和高位的两种方式
    求数组的长度 C
    C语言判断文件是否存在(转)
    Android使用JNI实现Java与C之间传递数据(转)
    字节流、字符串、16进制字符串转换__Java(转)
    字符串参数传递与返回值(转)
    JNI数据类型(转)
    十进制的数转换成十六进制的数 (转)
    C语言字符串长度(转)
    字符串截取函数--C语言(转)
  • 原文地址:https://www.cnblogs.com/gelandesprung/p/10571318.html
Copyright © 2011-2022 走看看