分析Android项目中的build.gradle中的使用到的不同仓库,以及怎样搭建使用内网Maven私服
Maven仓库
上几篇文件中,或多或少都讲述了仓库。有了仓库,我们就不用每一个项目中,都存储需要的依赖文件,声明某个存储所有依赖文件的位置,然后去该路径中引入,该文件可以称为Maven仓库。不仅避免了磁盘空间的浪费,而且还更好地管理依赖文件。
仓库可以是本地的,也可以是远程的。下面我们就分析Android项目中的build.gradle
中的关于仓库的声明,下面列出开发中遇到的所有仓库,不一定全部都会使用到。
repositories {
// 远程仓库
google()
jcenter()
mavenCentral()
// 自定义远程仓库
maven {
url "http://maven.aliyun.com/nexus/content/groups/publict"
}
// 本地仓库
mavenLocal()
maven{
// 应用Android Studio包内的仓库地址(Mac)
url "/Applications/Android Studio.app/Contents/gradle/m2repository"
// 应用Android Studio包内的仓库地址(Window),该路径取决放Android Studio安装包的路径。
// 注意,直接复制window的路径后该改反斜杠为如下的'/'
url "D:/Program Files/Android/android-studio/gradle/m2repository"
}
// 内网的私有仓库
maven{
url “http://localhost:8081/repository/testRepository/”
}
}
仓库介绍
远程中央仓库
- mavenCentral是最早的maven中央仓库,Maven仓库网站,可以通过Maven仓库引用地址看到全部内容。
- jcenter是Anroid Studio 0.8版本起的默认maven中央仓库,jcenter仓库网站,可以通过jcenter仓库引用地址看到全部内容。
- google是Android Studio 3.0版本起添加的仓库,google把gralde插件、tools、support、design等依赖文件放在其中,可以通过google仓库引用地址看到全部内容。
- 自定义远程仓库,如果觉得上面的仓库慢,可以使用阿里云的仓库。或者自己在内网搭建私有仓库,也可以这样声明。
本地仓库
- mavenLocal是默认本地仓库,仓库位置在前面的Maven介绍及安装有介绍到,Mac默认为
${user.home}/.m2/repository
。PC默认为C:\Users\用户名\.m2\repository
- 自定义本地仓库地址:如果本地的其他路径下,也有存放依赖文件,可以在这里声明该路径下的仓库地址。上面举例声明了Android Studio包内的仓库,用命令行编译代码的时候,如要加载Android Studio包的tool文件夹内的独有依赖包,就可以声明该仓库。
搭建内网Maven私服
安装配置Nexus
-
在maven仓库管理器Sonatype Nexus官网中,选择Products-->NEXUS REPOSITORY OSS(免费)下载
我下载的版本为,Nexus Repository Manager OSS 3.x - OS X,解压存放在本地中
➜ nexus-3.10.0-04-mac pwd /Users/guidongyuan/Applications/nexus-3.10.0-04-mac
-
把
nexus-3.10.0-04
的bin文件设置环境变量export NEXUS=/Users/guidongyuan/Applications/nexus-3.10.0-04-mac/nexus-3.10.0-04 export PATH=$PATH:$NEXUS/bin
-
查看Java版本
Nexus Repository Manager需要Java的运行环境,目前nexue 3需要JDK 1.8,如果有多个不同版本的JDK,且默认不是1.8,需要指定特定的JDK安装路径。
修改
bin/nexus脚本
并找到该行INSTALL4J_JAVA_HOME_OVERRIDE
,设置JDK的路径。 -
运行启动nexus
运行的时候,提示找不到org.apache.felix.framework,最后才发现,用解压工具,解压出来的文件名变了!变了!变了!
org.apache.felix.framework-5.6.2.jar
变成了org.apache.felix.framework-
,能不能这么坑!➜ ~ nexus run Could not resolve mvn:org.apache.felix/org.apache.felix.framework/5.6.2
老老实实用命令行解压,再执行就可以了,终端出现这个,则可以表示启动成功
Started Sonatype Nexus OSS 3.10.0-04
-
查看仓库网站
启动成功后,在本地访问
localhost:8081
,可以看到如下默认的用户账号为
admin
,密码为admin123
-
终端结束运行的Nexus
通过Ctrl + C可以结束
Nexus仓库介绍
Blob Stores:仓库存储库,设置了依赖库的存储地址,默认名称为default,位置为
/Users/guidongyuan/Applications/nexus-3.10.0-04-mac/sonatype-work/nexus3/blobs/default
-
Repositories:仓库列表
component name
- maven-central:maven中央库,默认从https://repo1.maven.org/maven2/拉取依赖包
- maven-releases:私库正式发行版依赖包
- maven-snapshots:私库快照(调试版本)依赖包
- maven-public:仓库分组,把上面三个仓库组合在一起对外提供服务,可以点击进去添加或者删除仓库,这样就不需要在pom文件中配置多个地址,一个就够了。
component type
- hosted:宿主仓库,存放我们自己项目生成的库
- 3rd party:第三方依赖的仓库,这个仓库内容通常是由内部人员自行下载之后发布上去
- proxy:远程仓库的代理,如果在本地找不到,则会从远程中央仓库中下载,再返回给用户,起到中转下载的作用。
具体介绍,可以参考官网Nexus教程或者搭建局域网Maven私服并结合Android Studio实现代码复用。
生成AAR文件
创建了内网的Maven仓库,就可以把一些功能模块上传上去。这里使用aar包作为讲解,不知道怎样生成的,可以参考如下:
上传依赖包
手动上传
点击Upload,选择一个仓库
添加依赖包的信息
gradle上传
一两个依赖包上传还好,但是,如果多个,不可能这样手动上传,这个时候,就可以通过编写gralde进行上传。
在build.grald
文件中,编写一个上传的task。
apply plugin: 'maven'
uploadArchives {
repositories.mavenDeployer {
pom.groupId = GROUP
pom.artifactId = ARTIFACTID
pom.version = VERSION
repository(url: NEXUS_URL) {
authentication(userName: USER_NAME, password: USER_PASSWORD)
}
}
}
属性变量可以放在同个目录下的gradle.properties
中,没有则需要自行创建。
GROUP = com.guidongyuan.studytest
ARTIFACTID = testandroidlibrary
VERSION = 1.0.0
NEXUS_URL = http://localhost:8081/repository/testRepository/
USER_NAME = admin
USER_PASSWORD = admin123
然后,在终端中,执行./gradlew uploadArchives
就可以上传。
另外也可以创建一个gradle文件如gradle_push.gradle编写task任务,不过需要在build.grald
文件中,进行引用。
apply from: "./gradle_push.gradle"
上传完成后,可以在nexus中查找到。
引用
上传到仓库后,引用的时候,就可以直接定义仓库和依赖库
maven {
url "http://localhost:8081/repository/testRepository/"
}
compile 'com.guidongyuan.studytest:testandroidlibrary:1.0.0'