几个月没有写作了,也忙也懒。安卓的技术世界日新月异,去年还在为兼容 2.3 而苦恼,今年开发便直接上了 api – 17。同时涌现出了一大波新技术:插件化、组件化等等等等,本篇也算是插件化组件化的最基础篇章吧。
Maven 仓库并非是安卓独有的,之所以在标题上有 Android 字样是因为本篇是基于 Android Studio 及 安卓项目 的试验,并不适用于其他的很多环境。
本篇我们就不为大家普及 maven 仓库的基础知识了,不了解的童鞋请自行找度娘;另外一定注意 git 仓库与 maven 仓库的区别,二者是不同的。
我们使用 Android Studio 构建安卓项目时候,少不了引用官方 sdk 或者他人的库,方法都是在 module 的 build.gradle 文件中添加类似代码:compile ‘com.android.support:appcompat-v7:26.+’;这行神奇的代码就把我们想使用的库引入到了项目中来。然而一般情况下我们引入自己的 module 却必须把它放在当前的 project 节点下,并使用这样的类似代码:compile project(‘:ICUtils:richeditor’);这就异常蛋疼了,如果项目足够大、协作的同事很多,那大家都在同一个项目目录下编写代码,既不优雅也不安全。
假如我们也只需要在 build.gradle 文件中使用一行 compile 代码就能实现引入自己或同事的 module 模块,而不需要关心这个 module 放在哪里,那岂不是很开心。有的童鞋可能说这不是闲的蛋疼么,非也!这样做好处多多:对于项目模块之间的解耦、同事间协作的便利性都是极好的。而且如果项目分模块的话,不久可以每个同事各写自己的 module,最终引入到 appModule 中了么,这便是模块化技术了。各位朋友看到这是不是有兴趣了呢?
目录
1、构建本地 maven 仓库
2、构建远程 maven 仓库
2.1、使用本地 maven 仓库 + git 的方式(基于 github、码云等第三方网站)
2.2、使用自己搭建的 maven 私服(基于nexus工具)
1. 构建本地 maven 仓库
使用 Android Studio 新建安卓工程 new -> project,选择 empty Activity,等待项目构建;
工程建好后,new -> module : toastmodule,名字随便取。
在 toastmodule 中新建 java文件 ToastUtil,并编写代码:
public class ToastUtil {
public static void toast(Context context, String msg) {
Toast.makeText(context, msg, Toast.LENGTH_SHORT).show();
}
}
打开 toastmodule 的 build.gradle 文件,添加代码:
apply plugin: 'maven' // 由于Android Studio 自带有 maven 插件,所以我们并不需要再额外安装配置 maven,比 java 工程师简化了不少操作
def MAVEN_REPOSITORY_PATH = 'file:///C:/ide/work_space/repo/'
def GROUP_ID = 'com.gitee.ynheng'
def ARTIFACT_ID = 'ToastMoudle'
def VERSION_NAME = '0.0.1'
def PACKAGE_TYPE = 'aar'
uploadArchives{
repositories{
mavenDeployer{
repository(url:MAVEN_REPOSITORY_PATH)
pom.project{
groupId GROUP_ID
artifactId ARTIFACT_ID
version VERSION_NAME
packaging PACKAGE_TYPE
}
}
}
}
注意 groupId + artifactId + version 就是我们以后要使用的compile后的代码,也不难理解,这里就不做介绍了,如果实在理解不了就把它当作一种索引。
打开 studio 下方的 Terminal,输入命令:
gradlew uploadArchives //然后敲击回车
第一次跑由于需要加载许多 maven 的插件会慢一点,以后再跑就快了;直至 Terminal 中出现
BUILD SUCCESSFUL
说明我们部署成功了,可以打开我们所设置的 MAVEN_REPOSITORY_PATH 去查看 maven部署 的结果。
本地仓库
这个时候我们就可以引用我们自己的这个库了,在 project节点的 build.gradle 文件中编写代码:
allprojects {
repositories {
//添加在此
maven { url 'file:///C:/ide/work_space/repo/' }
}
}
在 appModule 的 build.gradle 文件中编写代码:
dependencies {
//添加在此
compile 'com.gitee.ynheng:ToastMoudle:0.0.1'
}
sync 跑一下,打开 appModule 的 MainActivity 文件,在 onCreate() 方法中编写代码:
ToastUtil.toast(this,"it can use");
此时我们发现没有报错,这说明我们的 compile代码起作用了,ToastUtil这个类可以正常引用。
(其实我们当前试验的这个 toastmodule 是可以放在任何地方的,我只是便于代码编写所有放在了当前 project 下)
2. 构建远程 maven 仓库
我只总结了以下两种方式,当然你也可以上传到公共的 mavenCenter 或 jCenter 或 其他提供有maven仓库的平台去,
但鉴于国内的网络特点,这里就只尝试了这两种速度快且便捷的方法。
2.1、使用本地maven仓库 + git的方式(基于github、码云等第三方网站)
在第1步中构建本地仓库成功的前提下,在github上new Repository,
我new好的仓库路径是:https://github.com/ynheng/MavenRepo.git;
然后打开我们的本地仓库的目录,右键点击空白处(确定你安装的有git) -> Git Bash Here 打开git命令行,依次输入:
git init
git add .
git commit -m 'init repo and add all files'
git remote add origin https://github.com/ynheng/MavenRepo.git
git push origin master
每输入一行就回车一次,也许会要求输入账户及密码,如果有其他错误请自行解决,本篇的重点并非是介绍 git 操作,
当然你也可以使用图形化的 git 工具(如 sourceTree)
经上传后的github项目
然后我们需要更改的地方在 project 的 build.gradle 文件中改动代码:
allprojects {
repositories {
//改动在此
maven { url 'https://raw.githubusercontent.com/ynheng/MavenRepo/master/' }
}
}
如果你使用的是码云gitee.com,则是类似的maven-url是:
https://gitee.com/ynheng/MavenRepo/raw/master/
注意使用码云时不要用 private Repository,本人试验未成功(猜想是raw地址套路不同,但是不知道是什么套路啊),
如果有哪位同仁成功使用 private Repository 做maven仓库的话还请不吝赐教。
github及码云的 raw-url 的套路大家一看基本就明白了,在此不再赘述。
之所以我git直接push就可成功,是因为我在 git 仓库的设置中配置了 ssh 公钥,具体生成及设置公钥的方法请浏览
http://git.mydoc.io/?t=154712
2.2、使用自己搭建的 maven 私服(基于nexus工具)
搭建maven私服有多种方式(例如JFrog的Artifactory、sonatype社区的nexus),本篇我们使用nexus来尝试一把,下载路径:
https://www.sonatype.com/download-oss-sonatype
这里下载的是Nexus Repository Manager OSS 3.x版本,把压缩包解压到你合适的路径,打开路径:
\nexus-3.6.0-02-win64\nexus-3.6.0-02\bin
按住shift键的同时右键单击空白处,选择”在此处打开PowerShell窗口”(我的是最新win10,旧win或许是打开命令行窗口);输入 :
nexus.exe /run //然后回车(直接双击运行是不起作用的)
待命令行中出现如下标识的时候就说明启动成功
-------------------------------------------------
Started Sonatype Nexus OSS 3.6.0-02
-------------------------------------------------
注意:在启动成功后命令行窗口不能关闭,必须保证这个命令行窗口一直是开启状态,否则Nexus也就关闭了。
打开浏览器,在地址栏输入 locahost:8081 ,然后回车
nexus仓库loading图
进入nexus页面后,点击右上角的Sign in,输入初始默认账户:admin,初始默认密码:admin123,回车
登陆后点击页面最上方的齿轮图标,然后再点击Repositories,可以看到目前所有的仓库列表,
仓库列表
带文件夹图案的是仓库组,像原油桶一样的图案是仓库,点击一个你想用的仓库就可查看到仓库详情:
点击某个仓库进入
复制红色箭头指出的URL,把它设置为部署地址,也就是 MAVEN_REPOSITORY_PATH,然后我们再跑一遍命令行(gradlew uploadArchives),直至命令行中出现令人喜爱的:
BUILD SUCCESSFUL
这个时候,把 project 节点下的 build.gradle 修改为
allprojects {
repositories {
//改动在此
maven { url '' } //引号内的地址改为那个URL - MAVEN_REPOSITORY_PATH
}
}
OK,至此我们本地仓库和两种远程仓库的用法都介绍完了,就是这么简单有木有,大功告成!
安卓开发交流:
有兴趣一起学习的朋友,请加Q群:76161364