2025年搭建Maven(Nexus)私服—实现模块化开发

搭建Maven(Nexus)私服—实现模块化开发搭建 Maven Nexus 私服 概述 在开发过程中 需要集成 Unity 的资源 有 190M 由于 Unity 修改比较频繁 git 仓库越来越大 很快就达到了 2G 由于还有很多其它 module 每次构建都要很长的时间 为了减少 clone 的下载时间 提高构建速度

大家好,我是讯享网,很高兴认识大家。

搭建Maven(Nexus)私服

概述

在开发过程中,需要集成Unity的资源,有190M。由于Unity修改比较频繁,git仓库越来越大,很快就达到了2G,由于还有很多其它module,每次构建都要很长的时间。为了减少clone的下载时间,提高构建速度,尝试将Unity资源打包为一个aar资源上传到maven私服,然后通过依赖引入到主工程,其它独立的module也可以这样操作。这样做的优点有一,与Unity解耦,减少主工程的体积;二,加快构建速度。当然缺点也是有的,多分支并行开发时,无法流畅地切换分支,与现在的git分支管理模型冲突了。不管如何,解耦Unity,将module发布到maven私服,总体上来说是有进步的,特此记录一下这个过程。

一、安装和配置Nexus

sonatype
win-zip下载地址
Quick Start Guide
根据Quick Start Guide中的步骤安装和配置即可

二、使用gradle上传aar/jar

2.1 root-gradle

在项目的根目录下的build.gradle添加上面搭建好的仓库地址

allprojects { repositories { google() jcenter() // 本地的仓库地址(Release和snapshots) maven { url "http://localhost:8081/repository/maven-releases" } maven { url "http://localhost:8081/repository/maven-snapshots" } } } 

讯享网

2.2 library.gradle

在需要上传到仓库的module的build.gradle文件添加上传到maven仓库的task:

讯享网apply plugin: 'maven' uploadArchives{ repositories { mavenDeployer { repository(url: gradle.mavenUrl) { authentication(userName: gradle.mavenUserName, password: gradle.mavenPwd) } snapshotRepository(url: gradle.mavenDevUrl) { authentication(userName: gradle.mavenUserName, password: gradle.mavenPwd) } project.afterEvaluate { print project.isSnapshot def versionName = "${android.defaultConfig.versionName}" def version = versionName if (gradle.isSnapshot) { version = "$versionName-SNAPSHOT" } pom.version = version pom.artifactId = gradle.artifactId pom.groupId = gradle.groupId } } } } 

2.3 config.gradle

在根目录/其它模块的目录添加config.gradle,并在对应的build.gradle中引入(apply from: “config.gradle”),内容如下:

gradle.ext { mavenUrl = "http://localhost:8081/repository/maven-releases" // 这是nexus 上的release仓库 mavenDevUrl = "http://localhost:8081/repository/maven-snapshots" // 这是nexus 上的snapshot仓库 groupId = "com.bottle" // 项目组 artifactId = "trek" // 模块 mavenUserName = "admin" // nexus 的账号和密码,可以配置在本地的gradle.properties中 mavenPwd = "admin" // nexus 的账号和密码,可以配置在本地的gradle.properties中 isSnapshot = true // 是否是 snapshot } 

2.4 执行gradle task : uploadArchives

完成上面步骤2的配置后,在对应模块中的Tasks中多一个task:upload-uploadArchives,执行这个任务即可把aar/jar上传到刚才所创建的maven仓库。

2.5 添加aar/jar依赖

在需要添加仓库中的依赖的项目的根目录的build.gradle添加刚才的仓库地址:


讯享网

讯享网 allprojects { repositories { jcenter() google() maven { url "http://localhost:8081/repository/maven-snapshots/" } maven { url "http://localhost:8081/repository/maven-releases/" } } } 

然后就可以使用compile/implementation引入依赖了

implementation 'com.bottle:trek:1.0.0-SNAPSHOT' // {groupId:artifactId :version-name} 

三、 配置Jenkins,实现自动化构建

Unity打包,执行脚本:git add,git commit,git push 推送到这个新建的library库,然后触发这个library库的构建任务:uploadArchives,执行任务自动上传到maven。这样,这个library库就可以作为第三方依赖,引入到主项目中。具体Jenkins配置这里不讨论。

四. 遇到的问题

4.1 提交多个相同版本号的的snapshot时,添加依赖方未能及时更新

讯享网configurations.all { resolutionStrategy { // cache dynamic versions for 10 minutes cacheDynamicVersionsFor 10*60, 'seconds' // don't cache changing modules at all cacheChangingModulesFor 0, 'seconds' } } 

还有一种做法是使用gradle指令,刷新依赖,但是貌似也不起作用:

gradle build --refresh-dependencies 

4.2 与git多分支并行开发有冲突

由于Unity模块有专门团队负责开发,按照需求,有时候会同时开发多个版本。而主项目中只能够引入一个依赖,在集成打包的时候就不能自动化打包了。大概证明了,这适合于相对独立的module,而不适合修改频繁甚至并行开发的功能模块。可以为Library 创建多个分支,采用多分支打包,需要上哪个分支就构建哪个(也只能手动切换了)。

参考

Android-Nexus 搭建自己的 Maven 仓库 & Gradle 上传依赖包

小讯
上一篇 2025-03-15 12:57
下一篇 2025-01-04 21:30

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/15665.html