构建工具(四):Maven仓库及搭建内网仓库

分析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'

参考链接

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容

  • 用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金 Cover 有什么料? 从这篇文章中你...
    hw1212阅读 12,704评论 2 59
  • 前言   什么是maven、gradle?   Maven是一个项目管理和自动构建工具。  Gradle是一个基于...
    Haraway阅读 4,266评论 1 9
  • 2017年9月22日. 星期五. 晴天. 今天下午放学妈妈就带着我去接妹妹,走在接妹妹的路上我看见了一只死老鼠...
    室是陋室阅读 197评论 0 0
  • 突然想起 你送我的那个车站 本想偷吻你 作为离别 却终究没有成功 那天的路特别短 那天的时间特别地快 那天的车站太...
    懒墨阅读 146评论 0 4
  • 你们走后,住过的人也都搬走了 山风的絮叨没有留下任何脚印 我走进来,咳嗽一声 正好证明它成了一间不折不扣的空房子 ...
    甘树林阅读 486评论 3 4