Gradle对Maven的支持(Android开发)

来源:互联网 发布:php 使用aes加密 编辑:程序博客网 时间:2024/05/29 07:55

上篇文章(Maven+Nexus 环境搭建(Windows))讲了怎么搭建Maven和Nexus环境,并从项目生成到构建到发布都完整的跑了一遍。

我是做Android的,目前很多大型的Android项目都流行基础模块组件化开发,这里就能用到Maven了,而且,Gradle对Maven做了很好的支持。


一般我们在AndroidStudio中的Module类型分为3种:

application、library、java

在build.gradle中分别对应:

apply plugin: 'com.android.application'
apply plugin: 'com.android.library'
apply plugin: 'java'
这三种Module最终构建的结果分别是:

apk、aar、jar


我这里以构建aar作为例子做详细说明(aar即把class字节码文件和资源文件打包到一个aar包中供另外一个project使用):

那么,需要在build.gradle中如何配置,并如何deploy到Nexus私服上呢?

首先,在Project的build.gradle中需要添加以下脚本,指定Nexus库:

allprojects {    repositories {        jcenter()        maven {            url "http://localhost:8081/nexus/content/repositories/snapshots/"        }    }}
这个配置就是nexus仓库地址,这里是snapshot,等要发布再改成release(不清楚gradle是否支持动态切换,等后续再研究)

按照之前deploy 的步骤,到这里就需要在每个Module的pom.xml中添加  <distributionManagement>信息:

<distributionManagement>    <repository>        <id>nexus-releases</id>        <name>releases</name>        <url>http://localhost:8081/nexus/content/repositories/releases/</url>    </repository>    <snapshotRepository>        <id>nexus-snapshots</id>        <name>snapshots</name>        <url>http://localhost:8081/nexus/content/repositories/snapshots/</url>    </snapshotRepository></distributionManagement>
然后命令行一路compile->package->deploy

感谢gradle,我们现在不用这么麻烦了,我们只需要在对应的Module的build.gradle中添加一下脚本:

apply plugin: 'maven'uploadArchives {    repositories {        mavenDeployer {            pom.groupId = "com.company.test"            pom.artifactId = "TestMaven"            pom.version = "1.0.1-SNAPSHOT"            repository(url: "http://localhost:8081/nexus/content/repositories/snapshots/") {                authentication(userName: "admin", password: "admin123")            }        }    }}

然后,我们打开命令行,进入到项目目录,F:\MarvenRepo\TestMaven\app (到F:\MarvenRepo\TestMaven这层也可以,但是一个Project有多个Module,在这层的话会deploy所有Module),然后输入命令行(机器要先安装gradle环境):

gradle uploadArchives


然后,项目就自动构建出一个aar文件并deploy到Nexus仓库中了


以上的例子是library项目构建aar,当然apk、Jar可是可以的,步骤同上。


那么,别的Project需要如何引用上面构建成功的aar呢?

第一步,和上面一样,在Project的build.gradle中需要添加以下脚本,指定Nexus库:

allprojects {    repositories {        jcenter()        maven {            url "http://localhost:8081/nexus/content/repositories/snapshots/"        }    }}


然后打开Module的build.gradle,添加

apply plugin: 'maven'dependencies {    compile fileTree(dir: 'libs', include: ['*.jar'])    testCompile 'junit:junit:4.12'    compile 'com.android.support:appcompat-v7:23.0.1'    compile 'com.android.support:design:23.0.1'    compile 'com.company.test:TestMaven:1.0.1-SNAPSHOT'}


gradle是通过compile的方式来引用外部库,这里主要是dependencies的最后一项:

 compile 'com.company.test:TestMaven:1.0.1-SNAPSHOT'

这个结构为:compile 'groupId:artifactId:version'

然后build一下Project,gradle就会自动下载aar构建,等build完后,在项目的External Libraries下就有了TestMaven-1.0.1-SNAPSHOT



当然,如果需要引用的是一个Jar,也是按上述方式来做。


1 0