搞安卓开发的都知道三方库管理仓库叫maven,以前的jcenter废弃了。maven作为一个包管理的仓库,它的工作原理是什么样的呢,或者说,知道一个maven仓库的地址,如何可以手动找到某个包的下载地址呢?
举个例子依赖库为:com.mob.sdk:MobSDK:+
知道其maven库的地址为:http://mvn.mob.com/android/
那么根据java里包名转url的规则,点(.)和冒号(:)变成目录分隔符,该包的各种版本信息为:http://mvn.mob.com/android/com/mob/sdk/MobSDK/maven-metadata.xml
其内容为:
<metadata>
<groupId>com.mob.sdk</groupId>
<artifactId>MobSDK</artifactId>
<versioning>
<release>2018.0319.1724</release>
<versions>
<version>2018.0108.1653</version>
<version>2018.0108.1748</version>
...
<version>1.0.0</version>
<version>2018.0319.1724</version>
</versions>
<lastUpdated>20180319093247</lastUpdated>
</versioning>
</metadata>
依赖版本为+,即最新版本,这里就是2018.0319.1724,于是maven的pom文件路径为:
https://mvn.mob.com/android/com/mob/sdk/MobSDK/2018.0319.1724/MobSDK-2018.0319.1724.pom
pom即这个包的描述信息,其实也是一个xml文件,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>com.mob.sdk</groupId>
<artifactId>MobSDK</artifactId>
<version>2018.0319.1724</version>
<dependencies>
<dependency>
<groupId>com.mob.sdk</groupId>
<artifactId>MobSDK-Impl</artifactId>
<version>LATEST</version>
</dependency>
</dependencies>
</project>
库文件路径跟pom是同路径,没有特别说明,那就是jar包,特别说明时有可能是aab之类的文件。所以包的下载地址为:
https://mvn.mob.com/android/com/mob/sdk/MobSDK/2018.0319.1724/MobSDK-2018.0319.1724.jar
考虑到这里的的依赖库为com.mob.sdk.MobSDK-Impl,上面同样的逻辑再来一遍,就可以找到MobSDK-Impl-xxx.xxx.xxx.jar的下载地址。
一些众所周知的原因,在国内有一些依赖库下载不了,又或者是下载很慢,一种方案是改gradle,将依赖库的下载地址指向国内镜像,比如阿里的maven仓库,另一种方案就是自己搭建一个maven仓库,这能够极大地改善android studio启动的速度。
nexus是依赖仓库的具体软件实现,它并非只支持java的maven,也支持python的pip,js的npm,go的mod之类,它依赖三种类型的管理方式:
i. hosted模式,就是自己上传pom和jar文件,所以可以根据上面介绍的原理,从别人的仓库里下载,再上传到自己的仓库。此时它类似于一个网盘一样;
ii. proxy模式,指定某个其他的仓库地址,本地找不到,就去别人的仓库里找,找到后缓存在本地,可以控制多久需要检查一次是否有更新。此时它类似于一个缓存系统;
iii. group模式,就是将hosted和proxy的源组合在一块;
nexus的布署非常简单,直接从官方下载程序包:https://help.sonatype.com/repomanager3/product-information/download
当前版本为3.37.0-01,要求jre版本为1.8,运行时直接运行:
export INSTALL4J_JAVA_HOME=/home/xxx/jre1.8.0_311
./bin/nexus start
启动完成后,会在当前目录的上层目录创建sonatype-work目录,作为提供服务的主目录。
Java默认是有内存就用,不会主动回收,除非内存不足或者是达到设置的内存使用上限。nexus默认设置是2GB,配置在bin/nexus.vmoptions中,修改即可降低内存占用,比如:
-Xms512m
-Xmx512m
-XX:MaxDirectMemorySize=512m