失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 使用 Sonatype Nexus 3 搭建 Maven 私服 本地私有 Maven 仓库 Gradle 打包

使用 Sonatype Nexus 3 搭建 Maven 私服 本地私有 Maven 仓库 Gradle 打包

时间:2019-02-03 16:50:25

相关推荐

使用 Sonatype Nexus 3 搭建 Maven 私服 本地私有 Maven 仓库 Gradle 打包

1 下载 Nexus 3

/download-oss-sonatype

官网

(7月18日更新:网站改版了

下载地址:/nexus/3/latest-win64.zip

注: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-redirectstatusrestartforce-reload

注:cmd 需要 以管理员方式运行,否则会报错

对比图

注:安装与运行需要一点时间

nexus /run 示意图

3 运行管理后台

//端口号按照实际的来http://127.0.0.1:8085/ //或http://localhost:8085/

主页面 左侧

Browse

~Welcome

~Search

~Browse 浏览查看资源或组件 主页面右侧 Sign In 登录

//默认账号密码adminadmin123

登录后就可以通过 Repostitory —> Repostitories 进行组件的管理了

默认有几个比较常用的库

maven-releases:发行版组件, hosted 类型

maven-snapshots:快照(调试版本)组件, hosted 类型

maven-central:maven 中央库,就是代理 /maven2/,proxy 类型

maven-public:仓库分组概念,虚拟的 把上面三个仓库合并形成一个组,方便引用, group 类型

下图 最下面就是 group 将三个仓库合并成一个组了

代理 maven 中央库

远程仓库的组件包缓存, 下载过 jar 包,就无需再到互联网上远程的仓库中下载, 而可以直接下载nexus 缓存的那一份

工作示意图

4 Gradle 使用 Maven 私服

//常用中央库汇总//阿里云maven{ url '/nexus/content/groups/public'}//google() : /dl/android/maven2///或者maven {url '/'name 'Google'}//jcenter() : /mavenCentral() : https://repo./maven2///其他https://jitpack.io//maven2//maven2///--只有 http/maven2/ /nexus/content/groups/public//maven2//pub/mirrors/maven2/ //常用中央库搜索汇总///nexus/#welcomehttps://maven-///本地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 下载

/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=adminNEXUS_PASSWORD=admin123# 'groupId:artifactId:version' 或 'groudId:artifactId:version@aar' 形式POM_NAME=test_arr_namePOM_ARTIFACT_ID=test_arrPOM_GROUP_ID=com.louisgeekPOM_PACKAGING=aarPOM_DESCRIPTION=test_dependences_libPOM_VERSION=1.0.0

(2)library build.gradle 加入

apply plugin: 'com.android.library'//add maven pluginapply plugin: 'maven'

android {...uploadArchives {configuration = configurations.archivesrepositories {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_NAMEversion POM_VERSIONartifactId POM_ARTIFACT_IDgroupId POM_GROUP_IDpackaging POM_PACKAGINGdescription 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:uploadArchivesBUILD SUCCESSFUL in 1s25 actionable tasks: 1 executed, 24 up-to-date0: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 开发的一种方案)

使用 Sonatype Nexus 3 搭建 Maven 私服 本地私有 Maven 仓库 Gradle 打包 jar aar 后自动上传到 Nexus Maven 仓库配置

如果觉得《使用 Sonatype Nexus 3 搭建 Maven 私服 本地私有 Maven 仓库 Gradle 打包》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。