# maven_demo **Repository Path**: wys2018/maven_demo ## Basic Information - **Project Name**: maven_demo - **Description**: 一个将安卓依赖库发布到maven的demo - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-06-20 - **Last Updated**: 2022-07-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # maven_demo #### 介绍 * 一个将安卓依赖库发布到maven的demo; * 基于gradle 4.1.0版本; ### 一、项目结构以及主要文件说明 如下图: ![](./images/001.png) * 1、`app`:示例项目主工程,只用做示例,无实质作用; * 2、[app模块的gradle配置文件;](./app/build.gradle) * 3、[maven_config.gradle](./configs/maven_config.gradle):maven相关配置的gradle脚本; * 4、`lib-maven`:示例项目的依赖模块,在项目中,这个模块将作为上传到maven的模块; * 5、[lib-maven模块的gradle配置文件;](./lib-maven/build.gradle) * 6、[项目的gradle脚本;](./build.gradle) * 7、[项目的gradle配置文件;](./gradle.properties) * 8、[publish.sh](./publish.sh):自动化发布脚本,将由jenkins构建的时候调用; ### 二、运作过程简述: #### 1、子模块(将要上传到maven的库)的配置: 修改[lib-maven模块的gradle配置文件](./lib-maven/build.gradle),添加应用maven配置: ``` // 应用maven配置 apply from: "${MAVEN_PUB_SCRIPTE}" // 依赖库的maven的配置 project.ext { groupId = "com.hs.demo" artifactId = "lib-maven" publishVersion = project.ext.genPublishVersion("1.0") } ``` 其中: * `MAVEN_PUB_SCRIPTE`:为指向[maven_config.gradle](./configs/maven_config.gradle)的gradle属性,定义在[项目的gradle脚本](./build.gradle) ``` ext { // maven 配置文件 MAVEN_PUB_SCRIPTE = "${rootDir}/configs/maven_config.gradle" } ``` * `groupId `:为创建依赖库的『组织』的『唯一标识』; * `artifactId `:为依赖库的『唯一标识』; * `publishVersion `:发布的依赖库的版本,这个版本号通过[maven_config.gradle](./configs/maven_config.gradle)下面定义的一个方法生成,将根据配置,添加自增的构建号,以及区分测试版本(snapshot)和正式版本(release): ``` // 根据配置生成版本号 project.ext.genPublishVersion = { baseVersion -> if ("$IS_SNAPSHOT" == "true") { return "$baseVersion.$MAVEN_BUILD_CODE-SNAPSHOT" } else { return "$baseVersion.$MAVEN_BUILD_CODE" } } ``` >1、 IS\_SNAPSHOT和MAVEN\_BUILD\_CODE都是定义在[项目的gradle配置文件](./gradle.properties)里面,将在自动构建的时候动态修改的;
> 2、测试版本包将附带`-SNAPSHOT`标识,同时将存放到maven仓库的不同位置下; #### 2、gradle的`publish`的`task`: * 在子模块配置正确完成之后,执行`gradle sync`之后,在项目的gradle的task列表将出现以下项目(如图): ![](./images/002.png) 这个任务就是用于构建并上传到maven的任务; #### 3、自动化构建以及上传脚本:[publish.sh](./publish.sh) jenkins构建的时候,将执行这个脚本,脚本配合jenkins的配置,将实现以下效果: * 根据配置区分snapshot版本和release版本; * 上传的版本号的自增; * 上传相关文件至服务器; #### 4、jenkins的配置简要说明: 如下图: ![](./images/003.png) 项目实现了『参数化构建』,主要参数如下: * `branch`:构建的分支选择; * `moduleName`:需要构建的模块的名字,这里做成可配置,是为了方便同一个工程下面可能会有多个依赖库需要配置; * `jenkinsPublishType `:要发布的版本类型release为正式版;snapshot为测试版; 按照需要选择上述配置,点击『开始构建』,即可自动完成构建以及发布的过程; #### 5、主工程的依赖配置举例(依赖的引用方式): 参考[app模块的gradle配置文件](./app/build.gradle) * 源码依赖: ``` implementation project(':lib-maven') ``` * 依赖测试版本: ``` implementation 'com.hs.demo:lib-maven:1.0.0-SNAPSHOT' ``` * 依赖正式版本: ``` implementation 'com.hs.demo:lib-maven:1.0.0' ``` > 从maven依赖的时候,格式为:implementation 'groupId: artifactId: publishVersion'
> 版本号仅作为示例,请根据实际项目依赖形式配置 #### 6、gradle配置说明(即[项目的gradle配置文件](./gradle.properties)): 主要有以下关注内容: ``` # maven host MAVEN_HOSTS=http://192.168.120.14:8081 # build code MAVEN_BUILD_CODE=0 # is snapshot version IS_SNAPSHOT=false ``` * MAVEN\_HOSTS:maven仓库的服务器地址,请根据实际填写; * MAVEN\_BUILD\_CODE:构建号,自动构建的时候会自动配置,无需手动维护; * IS\_SNAPSHOT:是否是内测版本,自动构建的时候会根据所选选项进行配置,无需手动维护;