maven原理和nexus搭建

maven的原理

搞安卓开发的都知道三方库管理仓库叫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的下载地址。

nexus是干什么的

一些众所周知的原因,在国内有一些依赖库下载不了,又或者是下载很慢,一种方案是改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的布署

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目录,作为提供服务的主目录。

nexus内存占用高的问题

Java默认是有内存就用,不会主动回收,除非内存不足或者是达到设置的内存使用上限。nexus默认设置是2GB,配置在bin/nexus.vmoptions中,修改即可降低内存占用,比如:

-Xms512m
-Xmx512m
-XX:MaxDirectMemorySize=512m
发表于 2021年12月20日 16:11   评论:0   阅读:286  



回到顶部

首页 | 关于我 | 关于本站 | 站内留言 | rss
python logo   django logo   tornado logo