由于Maven构建是在有点慢,而且Gradle有缓存和增量构建功能所以决定迁移到Gradle。
在Maven项目中包含pom.xml文件夹下执行gradle init即可,不过有时候无法自动生成build.gradle可以用Idea自动生成一个空项目模板再手动修改。
首先是指定构建插件仓库并引入插件
buildscript {
ext {
springBootVersion = '1.5.9.RELEASE'
}
repositories {
maven { url "http://maven.aliyun.com/nexus/content/groups/public/" }
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
}
}
apply plugin: 'java'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
设置依赖
ext {
springCloudVersion = 'Edgware.SR2'
}
dependencies {
compile('org.springframework.cloud:spring-cloud-starter-oauth2')
compile('org.springframework.cloud:spring-cloud-starter-feign')
compile('org.springframework.boot:spring-boot-starter-freemarker')
compile('org.springframework.boot:spring-boot-starter-aop')
compile('org.springframework.boot:spring-boot-starter-actuator')
compile('org.springframework.cloud:spring-cloud-starter-eureka')
compile('org.springframework.cloud:spring-cloud-starter-config')
compile group: 'org.springframework.retry', name: 'spring-retry', version:'1.2.1.RELEASE'
compile('org.projectlombok:lombok:1.16.20')
testCompile('org.springframework.boot:spring-boot-starter-test') {
exclude(module: 'commons-logging')
}
}
dependencyManagement {
imports {
mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
}
}
需要升级到SpringBoot 2.0则替换相应版本即可。由于引入了io.spring.dependency-management,所有SpringCloud和SpringBoot管理的依赖包可以省略版本号。
同时还可对jar包瘦身
jar {
enabled = true
manifest {
attributes 'Main-Class': 'com.company.ServerApplication'
}
}
//change to bootJar for SpringBoot 2.0
bootRepackage {
enabled = false
}
构建时拷贝依赖包
task copyLib(type: Copy) {
copy {
from configurations.runtime
into "$buildDir/lib"
}
doFirst {
if(inputs.empty) throw new GradleException("Input source for copyLib doesn't exist")
}
}
最后启动java -cp com.company.package.jar:lib/* com.company.ServerApplication即可。
当然也可以在打包时将依赖包路径写入MANIFEST.MF文件实现直接用java -jar com.company.package.jar启动。
'Class-Path': configurations.compile.files.collect { "./lib/$it.name" }.join(' '),
另外要开启Gradle Daemon需要在Jenkinsfile里加上JENKINS_NODE_COOKIE = ‘dontKillMe’这样每次构建完成就不会停止gradle daemon了。