上篇文章(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中添加
nexus-releases
releases
http://localhost:8081/nexus/content/repositories/releases/
nexus-snapshots
snapshots
http://localhost:8081/nexus/content/repositories/snapshots/
然后命令行一路
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,也是按上述方式来做。