Nexus私服的搭建及使用

2017-12-07 12:51:53来源:oschina作者:Agnes2017人点击

分享
一、 背景介绍

最近公司要求开发自己的埋点SDK,作为公司内部公共的库,能够在多个项目中使用。那就存在一个问题:当库有更新时,如何让集成该库的各个项目能够很方便地进行同步呢?我的解决方案是:既为公共库,那肯定需要将其放在公司一个统一的地方(比如私有服务器),作为外部依赖库文件。各个项目集成该库时需要一些配置,自动下载该库,这样项目就可以使用它了。这里我们搭建的是Maven私服。


搭建 maven私服使用得比较多的是Nexus,Nexus是基于maven仓库管理的社区项目,主要的使用场景就是可以在局域网搭建一个maven私服,用来部署第三方公共构件或者作为远程仓库在该局域网的一个代理。例如:


第三方Jar包可以放在nexus上,项目可以直接通过Url和路径配置直接引用.方便进行统一管理。
同时有多个项目在开发的时候,一些共用基础模块可以单独抽取到nexus上,需要用的项目直接从nexus上拉取就行(基础模块的实现,维护和部署可以交给专门的人员,其他项目不用关心代码实现,这样也可以达到保证核心代码不泄露)。
一些封闭开发的过程中开发机是不能上公网的,所以连接central repository和下载jar就比较麻烦,这时就可以用nexus搭建起来一个介于公网和局域网之间的桥梁。

在介绍该如何操作之前,先介绍一下Android 开发中库的几种依赖方式。


二、Android 开发中库的依赖方式(基于Android Studio)

库的依赖方式,总的来讲分为两大类:


库文件依赖(library): 指 打包好的 jar、aar 文件
模块依赖(module): 指的就是 源代码模块
1、库文件依赖(library)
内部库:指 jar、aar 文件依赖。
外部库:gradle的标准依赖方式,导入、管理、升级都很方便。
2、模块依赖
内部模块 : 这个AS中常见的依赖方式,不再赘述。
外部模块:这种方式目前为止还没使用过。
三、Nexus私服的搭建
第一步:下载Nexus

Nexus OSS 官方下载地址。
输入图片说明


第二步:安装配置

1、将下载下来的压缩包解压,得到以下两个文件夹:
输入图片说明


2、将 nexus-3.6.1-02 目录下的 bin添加到系统环境变量 path中。
      打开命令行,输入命令 nexus /run,如下图所示:


输入图片说明
出现图中红框所示即表示:Nexus 启动成功。


3、打开浏览器,输入http://localhost:8081/#admin/repository,如图所示:


输入图片说明
默认账号:用户名 admin ; 密码是 admin123。登录成功后,如图:


输入图片说明


输入图片说明


输入图片说明


4、 maven-release 和 maven-snapshots 的区别


snapshots 称为 快照版本,适合版本不稳定时需要频繁发布的情况。开发者不需要手动更改版本号,gradle 会自动下载最新的版本。
release 称为正式版本, 当版本稳定后,发布到此仓库,不能频繁修改。需要开发者手动更改版本号。

注意:


使用 快照版本时,版本号后需要 加上 '-SNAPSHOT(必须为大写)',在build.gradle中配置好后,就会发布到 snaoshots 仓库。否则 会发到 正式仓库。
当使用该依赖库时,项目中如何能够自动更新仓库上的最新版本而不需要开发者手动更改版本号?我们需要在使用该库的模块中的 build.gradle 中添加如下配置:
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:26.1.0'
implementation 'com.android.support.constraint:constraint-layout:1.0.2'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.1'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
// implementation(name: 'mylibrary-debug', ext: 'aar')
// implementation 'com.github.bailing2017:MyFirstDemo:1.0'
// implementation project(':mylibrary')
implementation ('com.sdk.mylib:test:1.0-SNAPSHOT'){changing =true}
}
configurations.all {
// 每隔 0s 检查远程依赖是否存在更新
resolutionStrategy.cacheChangingModulesFor 0, 'seconds'
}
四、上传库到私服

上传库到私服有两种方式:


库中配置,配置完成后执行upload这个task
直接上传。

下面分别对这两种方式做介绍:


1、库中配置

在project下的gradle.properties文件中定义通用属性,方便如果有多个库需要部署时,不需要修改每一个库中的配置:


SNAPSHOT_REPOSITORY_URL=http://localhost:8081/repository/maven-snapshots/
REPOSITORY_URL=http://localhost:8081/repository/maven-releases/
# 登录 nexus oss 的用户名
NEXUS_USERNAME=admin
# 登录 nexus oss 的密码
NEXUS_PASSWORD=admin123
# 版本号
VERSION=1.0-SNAPSHOT
# 库名称
ARTIFACTID=test
# groupid
GROUPID=com.sdk.mylib
# type
PACKAGING=aar
# description
DESCRIPTION=dependences lib

修改 module对应的build.gradle文件,配置以谁的名义上传这个库,上传到什么地方,这个库叫什么名字,属于哪个group,ID和version、description、packageing等信息:


apply plugin: 'com.android.library'
apply plugin: 'maven'
android {
compileSdkVersion 26
defaultConfig {
minSdkVersion 14
targetSdkVersion 26
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:26.1.0'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.1'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
}uploadArchives {
repositories {
mavenDeployer {
snapshotRepository(url: SNAPSHOT_REPOSITORY_URL) {
authentication(userName: NEXUS_USERNAME, password: NEXUS_PASSWORD)
}
repository(url: REPOSITORY_URL) {
authentication(userName: NEXUS_USERNAME, password: NEXUS_PASSWORD)
}
pom.project {
// 快照版本,对应执行 snapshotRepository,否则执行 repository
version VERSION
artifactId ARTIFACTID
groupId GROUPID
packaging PACKAGING
description DESCRIPTION
}
}
}
}
artifacts {
archives file('mylibrary.aar')
}

打开 Gradle projects(在AS的右边栏),找到对应的 module,展开,找到Tasks下面的upload标签并双击,如图:


输入图片说明


在Gradle Console标签可以查看是否上传成功。


2、直接上传

在Nexus 3.6.1版本中没找到直接上传的功能,但是在 2.x.x版本中是有的。


五、在项目中使用私有仓库
1、在 project的 build.gradle文件中指定私有仓库的地址:

输入图片说明


2、在需要依赖私有仓库的 build.gradle文件中设置依赖关系:
// 如果是在测试阶段,可以按照第三部分所讲的配置;如果发布了,就只添加这一行,版本号
// 改为正式版本号
implementation ('com.sdk.mylib:test:1.0-SNAPSHOT'){changing =true}

相关文章

    无相关信息

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台