前言
maven是一个构建和管理项目的工具,做java的同学肯定不陌生,在Android中,默认采用的是gradle进行的构建,实际上很多gradle上的三方库也是放在maven仓库的。
在日常的android开发中,随着项目的日益增大,编译越来越慢,代码间的耦合越来越紧,相互之间的影响越来越大,而我们又不想将自己的代码放到jcenter等公开的仓库,这时候我们可以利用maven私服,将一部分代码抽成二方库和三方库,这样方便项目集成和管理。
想要上传二方库到maven,首先我们需要有一个自己的maven私服,如果公司已经有maven仓库了,大家可以直接跳到第二部分。
搭建私服
这里我们采用nexus3.X搭建自己的maven仓库。
nexus下载地址:https://www.sonatype.com/download-oss-sonatype
我这里的本地环境是win10,所以以windows为例,大家选择对应的版本即可。
解压压缩包,可以发现压缩包中有两个文件夹:nexus-3.5.1-02
和sonatype-work
,利用命令行cd到nexus-3.5.1-02
目录下的bin文件夹,与2.X版本不同,3.X版本简化了启动步骤,其中nexus.exe就是我们需要的启动入口,输入命令.\nexus.exe /run
,即可启动服务,如果启动成功的话,应该会显示这样:
这里需要主意,nexus需要oracle的JDK,openjdk是不行的,而且nexus.exe无法通过双击,或者右键管理员身份运行等方式打开。
启动成功以后,我们可以通过链接:
http://localhost:8081
访问到我们启动好的仓库。这里8081的端口可能会被占用,我们可以通过修改nexus的默认端口来修复。
界面如下:
点击右上角的登陆按钮,默认的登陆账号和密码是admin, admin123,然后点击配置页面的users,为我们android的上传新建一个用户。
创建用户信息,大致如图所示:
这里注意一下status 和 granted权限。创建成功以后,我们即可使用新建的用户进行登陆。
紧接着,我们创建自己的respository,点击
由于我们是自己内部使用,所以选择maven2(hosted)即可,基本配置如下图即可:
创建成功以后,我们即可在components找到自己的创建的仓库了。
至此,我们的仓库已经创建完毕!(这里以我之前的andorid-host为例)
android上传
我们为了将代码抽成二方库和三方库,建议单独将这些抽离的代码作为一个工程进行开发,这样可以尽量减少对原工程的依赖。
我们新建一个工程,然后在工程目录下新建一个android library.
接下来,我们准备gradle脚本,进行上传:
新建gradle.properties配置文件
在library下,新建gradle.properties文件,主要存放一些我们的配置项:
VERSION=1.0
GROUP_ID=com.maven.studo.library
ARTIFACT_ID=test
RELEASE_URL=http://127.0.0.1:8081/repository/android-host/
SNAPSHOT_URL=http://127.0.0.1:8081/repository/android-host/
NAME=cytus
PASSWORD=123123123
修改内容为自己新建仓库和用户时的信息。
新建上传脚本maven_push.gradle
在library下,新建上传脚本:maven_push.gradle
脚本内容如下:
apply plugin: 'maven'
apply plugin: 'signing'
configurations {
deployerJars
}
repositories {
mavenCentral()
}
// 判断版本是Release or Snapshots
def isReleaseBuild() {
return !VERSION.contains("SNAPSHOT");
}
// 获取仓库url
def getRepositoryUrl() {
return isReleaseBuild() ? RELEASE_URL : SNAPSHOT_URL;
}
uploadArchives {
repositories {
mavenDeployer {
beforeDeployment {
MavenDeployment deployment -> signing.signPom(deployment)
}
pom.version = VERSION
pom.artifactId = ARTIFACT_ID
pom.groupId = GROUP_ID
repository(url: getRepositoryUrl()) {
authentication(userName: NAME, password: PASSWORD) // maven授权信息
}
}
}
}
// 进行数字签名
signing {
// 当 发布版本 & 存在"uploadArchives"任务时,才执行
required { isReleaseBuild() && gradle.taskGraph.hasTask("uploadArchives") }
sign configurations.archives
}
然后将改脚本导入library的构建过程:
在library下的build.gradle中,在
apply plugin: 'com.android.library'
下加入一行:
apply from: 'maven_push.gradle'
上传
sync一下,然后你就会在这里发现多了一个上传的选项,
双击运行即可。
上传成功之后,就可以在你建立的仓库里看到上传的文件了:
项目依赖
项目依赖就比较简单了,我们在项目根目录下的build.gradle文件中添加我们的仓库:
然后就像依赖普通三方库一样,在app的build.gradle下添加依赖:
compile 'com.maven.studo.library:test:1.0'
sync一下,就可以发现,我们已经依赖到了我们在仓库的代码了!
至此,我们的maven私服已经大功告成!