1 下载 Nexus 3
https://www.sonatype.com/download-oss-sonatype
官网截图
注:Nexus 3 版本的运行需要 jdk1.8
解压
得到 2 个文件夹
// Nexus 运行时所需要的文件,如启动脚本
nexus-3.9.0-01
// Nexus生成的配置文件,日志文件,仓库文件
sonatype-work
修改端口
【1】配置 nexus3 端口目录:
\nexus-3.9.0-01-win64\sonatype-work\nexus3\etc\nexus.properties
【2】或者修改全局目录:
\nexus-3.9.0-01-win64\nexus-3.9.0-01\etc\nexus-default.properties
2 安装 Nexus 3
【1】将 \nexus-3.9.0-01-win64\nexus-3.9.0-01\bin 的绝对路径加入系统的 PATH 环境变量,方便使用 cmd 命令
【2】或者也可以直接通过命令 切换到当前文件夹执行
//安装 Nexus 3 服务
nexus /install
//启动 Nexus 3
nexus /start
//停止 Nexus 3
nexus /stop
//卸载 Nexus 3 服务
nexus /uninstall
//启动 Nexus 3 打印日志
nexus /run
//其他命令 未测试
run-redirect
status
restart
force-reload
注:cmd 需要 以管理员方式运行,否则会报错
对比图
注:安装与运行需要一点时间
nexus /run 示意图
3 运行管理后台
//端口号按照实际的来
http://127.0.0.1:8085/
//或
http://localhost:8085/
- 主页面 左侧
Browse
~Welcome
~Search
~Browse 浏览查看资源或组件
- 主页面右侧 Sign In 登录
//默认账号密码
admin
admin123
登录后就可以通过 Repostitory —> Repostitories 进行组件的管理了
默认有几个比较常用的库
maven-releases:发行版组件, hosted 类型
maven-snapshots:快照(调试版本)组件, hosted 类型
maven-central:maven 中央库,就是代理 https://repo1.maven.org/maven2/,proxy 类型
maven-public:仓库分组概念,虚拟的 把上面三个仓库合并形成一个组,方便引用, group 类型
下图 最下面就是 group 将三个仓库合并成一个组了
- 代理 maven 中央库
远程仓库的组件包缓存, 下载过 jar 包,就无需再到互联网上远程的仓库中下载, 而可以直接下载nexus 缓存的那一份
- 工作示意图
4 Gradle 使用 Maven 私服
//常用中央库汇总
//阿里云
maven{ url 'http://maven.aliyun.com/nexus/content/groups/public'}
//
google() : https://dl.google.com/dl/android/maven2/
//或者
maven {
url 'https://maven.google.com/'
name 'Google'
}
//
jcenter() : https://jcenter.bintray.com/
mavenCentral() : https://repo.maven.apache.org/maven2/
//其他
https://jitpack.io/
https://repo1.maven.org/maven2/
http://repo1.maven.org/maven2/
//--只有 http
http://repo2.maven.org/maven2/
http://repository.jboss.org/nexus/content/groups/public/
http://uk.maven.org/maven2/
http://mirrors.ibiblio.org/pub/mirrors/maven2/
//常用中央库搜索汇总
http://mvnrepository.com/
http://search.maven.org/
http://maven.aliyun.com/nexus/#welcome
https://maven-repository.com/
//本地
mavenLocal() /.m2/settings.xml 配置的 localRepository 地址
统一使用 Maven 私服
/* google()
jcenter()*/
maven{
url 'http://localhost:8085/repository/android-maven-public/'
}
android-maven-public 是 group 组合了一系列 hosted 和 proxy
5 上传自定义组件到库
【1】图形化上传
上传的结果
【2】使用 mvn 命令上传
(1) maven 下载
http://maven.apache.org/download.cgi
将 \apache-maven-3.5.3-bin\apache-maven-3.5.3\bin 的绝对路径加入系统的 PATH 环境变量,方便使用 cmd 命令,或者也可以直接通过命令 切换到当前文件夹执行
(2)配置 servers 账户密码
配置 \apache-maven-3.5.3-bin\apache-maven-3.5.3\conf\settings.xml
或者 C:\Users\<User>\.m2\settings.xml 中的
<servers>
<server>
<id>releases</id>
<username>admin</username>
<password>admin123</password>
</server>
<server>
<id>snapshots</id>
<username>admin</username>
<password>admin123</password>
</server>
</servers>
注: 使用 mvn -X 命令 可以插件当前生效的 settings.xml 路径
(3)上传 (DrepositoryId 要和上面 server 配置的 id 一致,另外运行命令需要去掉换行)
mvn deploy:deploy-file
-DartifactId=zzz
-Dversion=1.0.0
-Dpackaging=jar
-Dfile=D:\com-xxx-yyy-zzz-1.0.0.jar
-Durl=http://127.0.0.1:8085/repository/maven-releases/
-DrepositoryId=releases
【3】Gradle uploadArchives
(1) 项目 gradle.properties 文件加入
NEXUS_MAVEN_URL=http://localhost:8085/repository/maven-releases/
NEXUS_MAVEN_SNAPSHOT_URL=http://localhost:8085/repository/maven-snapshots/
NEXUS_USERNAME=admin
NEXUS_PASSWORD=admin123
# 'groupId:artifactId:version' 或 'groudId:artifactId:version@aar' 形式
POM_NAME=test_arr_name
POM_ARTIFACT_ID=test_arr
POM_GROUP_ID=com.louisgeek
POM_PACKAGING=aar
POM_DESCRIPTION=test_dependences_lib
POM_VERSION=1.0.0
(2)library build.gradle 加入
apply plugin: 'com.android.library'
//add maven plugin
apply plugin: 'maven'
android {
...
uploadArchives {
configuration = configurations.archives
repositories {
mavenDeployer {
repository(url: NEXUS_MAVEN_URL) {
authentication(userName: NEXUS_USERNAME, password: NEXUS_PASSWORD)
}
snapshotRepository(url: NEXUS_MAVEN_SNAPSHOT_URL) {
authentication(userName: NEXUS_USERNAME, password: NEXUS_PASSWORD)
}
//'groupId:artifactId:version' 或 'groudId:artifactId:version@aar' 形式
pom.project {
name POM_NAME
version POM_VERSION
artifactId POM_ARTIFACT_ID
groupId POM_GROUP_ID
packaging POM_PACKAGING
description POM_DESCRIPTION
}
}
}
}
// 生成sources.jar 写 artifacts {} 之前
task androidSourcesJar(type: Jar) {
classifier = 'sources'
from android.sourceSets.main.java.srcDirs
}
artifacts {
//编译的源码类型
archives androidSourcesJar
//archives androidJavadocsJar
}
...
}
执行上传
结果
Executing tasks: [uploadArchives]
Configuration on demand is an incubating feature.
:library:androidSourcesJar UP-TO-DATE
:library:preBuild UP-TO-DATE
:library:preReleaseBuild UP-TO-DATE
:library:compileReleaseAidl UP-TO-DATE
:library:compileReleaseRenderscript UP-TO-DATE
:library:checkReleaseManifest UP-TO-DATE
:library:generateReleaseBuildConfig UP-TO-DATE
:library:generateReleaseResValues UP-TO-DATE
:library:generateReleaseResources UP-TO-DATE
:library:packageReleaseResources UP-TO-DATE
:library:platformAttrExtractor UP-TO-DATE
:library:processReleaseManifest UP-TO-DATE
:library:generateReleaseRFile UP-TO-DATE
:library:prepareLintJar UP-TO-DATE
:library:generateReleaseSources UP-TO-DATE
:library:javaPreCompileRelease UP-TO-DATE
:library:compileReleaseJavaWithJavac UP-TO-DATE
:library:extractReleaseAnnotations UP-TO-DATE
:library:mergeReleaseConsumerProguardFiles UP-TO-DATE
:library:mergeReleaseShaders UP-TO-DATE
:library:compileReleaseShaders UP-TO-DATE
:library:generateReleaseAssets UP-TO-DATE
:library:packageReleaseAssets UP-TO-DATE
:library:packageReleaseRenderscript NO-SOURCE
:library:processReleaseJavaRes NO-SOURCE
:library:transformResourcesWithMergeJavaResForRelease UP-TO-DATE
:library:transformClassesAndResourcesWithSyncLibJarsForRelease UP-TO-DATE
:library:compileReleaseNdk NO-SOURCE
:library:mergeReleaseJniLibFolders UP-TO-DATE
:library:transformNativeLibsWithMergeJniLibsForRelease UP-TO-DATE
:library:transformNativeLibsWithSyncJniLibsForRelease UP-TO-DATE
:library:bundleRelease UP-TO-DATE
:library:uploadArchives
BUILD SUCCESSFUL in 1s
25 actionable tasks: 1 executed, 24 up-to-date
0:03:33: Task execution finished 'uploadArchives'.
【4】常见错误
(1)
Could not find metadata com.louisgeek:test_arr/maven-metadata.xml in remote (http://localhost:8085/repository/maven-releases/)
第一次执行 uploadArchives 会报,包也上传成功了,第二次就不报错了,不知道为啥,暂时距记录一下
(2)
Return code is: 401, ReasonPhrase: Unauthorized. -> [Help 1]
解放方案:见 “(2)配置 servers 账户密码 ”
(3)
Return code is: 400, ReasonPhrase: Repository does not allow upd ating assets: maven-releases.
解放方案:maven-releases 仓库默认不允许重复部署,进入maven-releases的配置界面,将Deployment policy 由 Disable redeploy 策略 改为 Allow redeploy 策略
6 简单备份迁移
备份迁移以下文件
//包含 maven 缓存和配置
C:\Users\<User>\.m2
//包含 gradle 缓存和配置
C:\Users\<User>\.gradle
//包含 nexus 缓存和配置
\nexus-3.9.0-01-win64
至新设备,同时此法针对只有内网设备同样可用(所以私服也是可以用来解决只有内网的设备使用 Maven 和 Gradle 开发的一种方案)