Spring Boot 集成Gradle

1、常用配置

//引用插件,必须是gradle官方【https://plugins.gradle.org/】收录的,否则报错
plugins {
    id 'org.springframework.boot' version '2.6.2'
    id 'io.spring.dependency-management' version '1.0.11.RELEASE'
    id 'java-library' //配置war时,打包为war文件;java时,打包为Jar文件
    id 'maven-publish' //用于上传jar到maven仓库
}
//分组
group = 'cn.ming'
//版本
version = '2.0.0-SNAPSHOT'
//JDK版本
sourceCompatibility = JavaVersion.VERSION_1_8
//发布使用JDK版本
targetCompatibility = JavaVersion.VERSION_1_8
//指定编译编码格式,防止中文乱码
compileJava.options.encoding = "UTF-8"
compileTestJava.options.encoding = "UTF-8"
//指定项目编码
tasks.withType(JavaCompile) {
    options.encoding = "UTF-8"
}
//是否允许当前包作为依赖被引用
jar.enabled = true
//是否允许当前包文件被外部引用
tasks.withType(GenerateModuleMetadata) {
    enabled = true
}
//发布(等同于maven install)
publishing {
    publications {
        mavenJava(MavenPublication) {
            from components.java
        }
    }
    repositories {
        mavenLocal()
    }
}
//常量定义,可用于依赖版本统一管理
ext {
    projectVersion = "2.0.0-SNAPSHOT"
}
//依赖
dependencies {
     //Spring Boot应用专属,配合dependency-management使用
    implementation 'org.springframework.boot:spring-boot-gradle-plugin'
}

2、依赖范围

类型说明对应已弃用版本
implementation会添加依赖到编译路径,并且会将依赖打包到输出,但是在编译时不会将依赖的实现暴露给其他module,也就是只有在运行时其他module才能访问这个依赖中的实现。使用这个配置,可以显著提升构建时间,因为它可以减少重新编译的module的数量。建议,尽量使用这个依赖配置。compile
api会添加依赖到编译路径,并且会将依赖打包到输出,与implementation不同,这个依赖可以传递,其他module无论在编译时和运行时都可以访问这个依赖的实现,也就是会泄漏一些不应该不使用的实现。举个例子,A依赖B,B依赖C,如果都是使用api配置的话,A可以直接使用C中的类(编译时和运行时),而如果是使用implementation配置的话,在编译时,A是无法访问C中的类的。compile(效果完全一致)
compileOnly会把依赖加到编译路径,编译时使用,不会打包到输出。这可以减少输出的体积,只在编译时需要,在运行时可选的情况,很有用。provided
runtimeOnly运行时使用,但不会添加到编译路径apk
annotationProcessor用于注解处理器的依赖配置compile

3、依赖方式

  • 本地library模块依赖
    直接依赖本地库代码,适用于多模块应用。

    • 在settings.gradle下

      include ‘:ming-core-common’
      project(‘:ming-core-common’).projectDir = new File(settingsDir, ‘…/ming-core-common’)

    • 在build.gradle下

      implementation project(‘:ming-core-common’)

  • 本地二进制依赖
    依赖工程中的 module_name/libs/目录下的Jar文件(注意Gradle的路径是相对于build.gradle文件来读取的,所以上面是这样的相对路径)。

    • 所有文件

      implementation fileTree(dir: ‘libs’, include: [‘*.jar’])

    • 单个文件

      implementation files(‘libs/foo.jar’, ‘libs/bar.jar’)

c、远程二进制依赖

implementation ‘cn.ming:ming-core-common:2.0.0-SNAPSHOT’
implementation(‘cn.ming:ming-core-common:2.0.0-SNAPSHOT’)
implementation group: ‘cn.ming’, name: ‘ming-core-common’, version: ‘2.0.0-SNAPSHOT’

4、排除依赖(解决包冲突问题)

dependencies {
    implementation ('com.github.bumptech.glide:glide:4.9.0') {
        exclude group:'com.android.support', module: 'support-fragment'
        exclude group:'com.android.support', module: 'support-core-ui'
        exclude group:'com.android.support', module: 'support-compat'
        exclude group:'com.android.support', module: 'support-annotations'
    }
}

5、多环境打包

//测试环境:打JAR包
task bootJarTest {
	println ""
	dependsOn 'clean'
	doFirst {
		System.setProperty("spring.profiles.active", "test")
		System.setProperty("logging.file.path", "D:/logbacktestlog")
		System.setProperty("logging.file.name", "testLog")
	}
	finalizedBy("bootJar")
}
//生产环境:打JAR包
task bootJarProv {
	dependsOn 'clean'
	doFirst {
		System.setProperty("spring.profiles.active", "prov")
		System.setProperty("logging.file.path", "D:/logbackprovlog")
		System.setProperty("logging.file.name", "provLog")
	}
	finalizedBy("bootJar")
}
//默认dev配置
def env = "dev"
//只要是需要通过动态配置的yml参数,必须在processResources中进行初始化配置,否则参数值无法动态注入
processResources {
	doFirst {
		filter ReplaceTokens, tokens: [env: System.getProperty("spring.profiles.active", env)]
		filter ReplaceTokens, tokens: [logPath: System.getProperty("logging.file.path", "")]
		filter ReplaceTokens, tokens: [logName: System.getProperty("logging.file.name", "")]
	}
}

6、持续更新中

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值