在项目根目录build.gradle中设置:
configure(allprojects) { project ->
// 将依赖包复制到lib目录
task copyBootJar(type: Copy, dependsOn: ['jar']) {
// 分组到build
group "build"
from configurations.api {
canBeResolved = true
}
// 清除现有的lib目录
delete "$buildDir/libs/lib"
from configurations.getByName('runtimeClasspath')
into "$buildDir/libs/lib"
}
// 拷贝resources资源文件
task copyBootResources(type: Copy, dependsOn: 'copyBootJar') {
// 分组到build
group "build"
// 清除现有的lib目录
delete "$buildDir/libs/resources"
from fileTree(dir: 'src/main/resources')
filteringCharset = 'UTF-8'
into "$buildDir/libs/resources"
}
// 配置bootJar进行打包
tasks.named("bootJar") {
// lib目录的清除和复制任务
dependsOn copyBootJar
dependsOn copyBootResources
def libStr = ''
// configurations 只能放入任务中
doFirst() {
manifest {
if (configurations.getByName('runtimeClasspath').isCanBeResolved()) {
// 获取运行时jar包
libStr = configurations.getByName('runtimeClasspath').getFiles().sort().collect { "lib/$it.name" }.join(' ') + " resources/"
// println(libStr)
}
attributes(
'Implementation': DEVELOPER_NAME,
'Specification-Version': DEVELOPER_NAME,
'Implementation-Vendor': DEVELOPER_ID,
'Implementation-ProductID': project.name,
'Compile-DateTime': new Date().format('yyyy-MM-dd HH:mm:ss'),
'Compile-User': DEVELOPER_NAME,
'Class-Path': "$libStr"
)
}
}
mainClass = "${MainClassName}"
// 排除所有的jar和resources(jar和resources分离需打开)
excludes = ["*.jar","*.properties","*.xml","*.yml","mybatis/","i18n/"]
}
}