# 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版本;
### 一、项目结构以及主要文件说明
如下图:

* 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列表将出现以下项目(如图):

这个任务就是用于构建并上传到maven的任务;
#### 3、自动化构建以及上传脚本:[publish.sh](./publish.sh)
jenkins构建的时候,将执行这个脚本,脚本配合jenkins的配置,将实现以下效果:
* 根据配置区分snapshot版本和release版本;
* 上传的版本号的自增;
* 上传相关文件至服务器;
#### 4、jenkins的配置简要说明:
如下图:

项目实现了『参数化构建』,主要参数如下:
* `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:是否是内测版本,自动构建的时候会根据所选选项进行配置,无需手动维护;