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’)
- 在settings.gradle下
-
本地二进制依赖
依赖工程中的 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", "")]
}
}