标题
为什么使用gradle而不是maven分离打包有什么优势展示gradle多模块构建目录结构settings.gradle文件配置父模块,build.gradle配置公共模块common build.gradle配置framework模块build.gradle配置api模块build.gradle配置 yml配置文件需要注意最后打包出来的结构lib包中包含了所有的jar包为什么使用gradle而不是maven
对于开发者而言,maven与gradle带来的实际体验是一样的。因为我们只关注实际的业务开发!这里举例两个我放弃maven的两个点!
1、我需要完成分离jar包的打包方式,而maven的插件始终下载不下来
2、gradle的构建速度确实比maven快
分离打包有什么优势
当我们需要频繁更新项目到生产环境时发现,每次都需要更新很大的jar包,所以我们把一些基础的依赖分离出来!这样我们每次只要更新代码的jar包只有几百KB!在频繁的更新也不慌了
展示gradle多模块构建
目录结构
settings.gradle文件配置
rootProject.name = 'twice-issue'include 'common'include 'framework'include 'api'include 'generator'
父模块,build.gradle配置
// 插件配置,这里指定插件的下载路径buildscript {repositories {mavenLocal()maven {url '/repository/public/' }mavenCentral()}}// 需要引入的插件 applyplugins {id 'java'id 'org.springframework.boot' version '2.4.1' apply falseid 'io.spring.dependency-management' version '1.0.11.RELEASE' apply false}// 子项目配置subprojects {apply plugin: 'org.springframework.boot'apply plugin: 'io.spring.dependency-management'apply plugin: 'java'apply plugin: 'java-library'apply plugin: 'idea'group 'com.mc'version '0.1'sourceCompatibility = JavaVersion.VERSION_1_8targetCompatibility = JavaVersion.VERSION_1_8repositories {mavenLocal()maven {url '/repository/public/' }mavenCentral()}dependencies {implementation 'org.springframework.boot:spring-boot-starter-web'implementation 'org.springframework.boot:spring-boot-starter-test'compileOnly 'org.projectlombok:lombok'annotationProcessor 'org.projectlombok:lombok'}}
公共模块common build.gradle配置
jar.enabled = truebootJar.enabled = falsedependencies {api 'org.springframework.boot:spring-boot-starter-jdbc'api 'org.springframework.boot:spring-boot-starter-validation'api 'org.springframework.boot:spring-boot-starter-security'api 'org.springframework.boot:spring-boot-starter-data-redis'api 'com.baomidou:mybatis-plus-boot-starter:3.4.1'api 'mysql:mysql-connector-java:8.0.22'// 解决springfox-boot-starter打包后缺失org\mapstruct\factory\Mappers问题api 'org.mapstruct:mapstruct:1.4.1.Final'api 'io.springfox:springfox-boot-starter:3.0.0'api 'com.github.xiaoymin:knife4j-spring-ui:3.0.2'api 'com.alibaba:fastjson:1.2.75'}
framework模块build.gradle配置
jar.enabled = truebootJar.enabled = falsedependencies {api project(':common')}
api模块build.gradle配置
dependencies {implementation project(':framework')}// 将依赖包复制到lib目录task copyJar(type: Copy) {// 清除现有的lib目录delete "$buildDir/libs/lib"from pileClasspathinto "$buildDir/libs/lib"}// 拷贝配置文件task copyConfigFile(type: Copy) {// 清除现有的配置目录delete "$buildDir\\libs\\config"from 'src/main/resources'into 'build/libs/config'}// 依赖jar包与主程序分离式打包bootJar {// 引入需要的文件includes = ["common-${project.version}.jar","framework-${project.version}.jar","com/mc/api/**","logback.xml",]// 打包mapper xml文件processResources {from('src/main/java') {include '**/*.xml'}}// 拷贝文件到libdependsOn copyJardependsOn copyConfigFile// 指定依赖包的路径manifest {attributes 'Class-Path': pileClasspath.files.collect {"lib/$it.name" }.join(' ')}}
yml配置文件需要注意
使用gradle指定xml文件时需要指定具体路径不能用**代替!这里我也没深入研究其原因
示例:
mybatis-plus:# mapper.xml 文件路径(需指定具体路径不可用**替代)mapper-locations: classpath:/com/mc/api/mapper/xml/*Mapper.xml