首页  »   Android

Android maven公布

网友分享于:2018-03-19  浏览:1次
Android maven发布
    在项目做到中后期的时候,基本会有多个甚至十几个模块构成。各个模块相对独立,但有些又相互依赖。
     现阶段公司的各个模块有单独的仓库管理,通过导入其他模块的aar来实现依赖,这种方式简单快捷,但当一个仓库更新后,其他仓库就需要手动拷入改版本的aar,这样既不利于版本管理,又比较麻烦。
     这时我们就需要通过maven来发布各自仓库的版本到Maven仓库中,然后每个仓库就可以通过maveb来引用所需要的依赖。

     公司内部会自己搭建私有Maven仓库,就把包发布到私有Maven仓库当中。在当前module的gradle中进行maven发布的配置
uploadArchives {
    repositories {
        mavenDeployer {
            pom.project {
                groupId = "com.zsg.sample"
                artifactId = "smart"
                version = "1.0.0"
            }
            repository(url: "http://192.168.0.1:8800/test") {
                authentication(userName: "admin", password: "123")
            }

        }
    }
}


上面对maven进行简单的配置。通过执行gradle的task 来将该仓库上传到maven
在其他模块这样依赖:  compile "com.zsg.sample:smart:1.0.0@aar"




    执行这个task时,会对项目进行编译,最后会将仓库中生成的aar和poms文件传到maven上去。aar这个大家都知道,这边我简单介绍下poms文件。
     大家在build目录中可以看到poms文件夹,这里面有一个pom-default.xml文件,这个文件声明了仓库的名称、版本等重要的信息,这些信息都是我们在上面配置的。然后就是这个库所依赖的其他仓库的信息。这里要注意下,当我们依赖发布到maven上的这个库的时候,会同时依赖poms文件中所声明的其他库。




   这里可以看到poms文件中声明了appcompat-v7这个 google库,如果发布时不想将这个库加入到依赖中  可以在gradle文件中将compile变为provided  这样打包的时候就把会将这个依赖放入poms文件中。
   再下面我们可以发下我这模块又依赖了本地的panel-release模块  那么问题就来了,其他的模块依赖我这模块是 同时就要依赖panel-release模块 ,但panel-release模块又是我本地的,并没有传到maven上,所以就会导致依赖失败。这里有3个解决办法:
1、将panel-release的依赖变为provided  这样就不会放到poms里,但是这样可能会导致你编译过不了。
2、在动态生成poms文件时将panel-release依赖去掉
uploadArchives {
    repositories {
        mavenDeployer {
            conf2ScopeMappings.mappings.remove(configurations.compile)
            ......
        }
     }
}


3、在依赖时只依赖aar文件,不依赖aar包所依赖的其他库。
    compile "com.zsg.sample:smart:1.0.0@aar"

强烈推荐第三种方法!!!!











相关解决方案

最新解决方案