使用Gradle将java应用打包为类似tomcat的目录结构

使用Gradle将java应用打包为类似tomcat的目录结构

背景

当前Gradle打包的方式有打包成单一的jar或多个jar包的方式,可参考这篇文章


当前的问题

从运行维护的角度上看,单一的jar包运行方式在后期的修改和部署存体积过大的问题,若使用多个jar包的方式,则主工程中若修改配置时,则必须重新打包,稍显麻烦

改进

在多个jar包的基础上,将工程jar包从解压至classes目录,将从lib文件夹移除,在启动的脚本的classpath将主工程的jar包替换为classes目录。若需要修改配置文件时,则直接在classes文件夹中修改,重启可生效,避免重新打包。

build.gradle脚本

archivesBaseName = 'server'
version = '1.0.0' 
// 将程序打包成bin及lib两个文件夹,以便替换及修改配置
apply plugin: 'application'
// 启动类
mainClassName = 'com.cdy.Server'

// 将classpath中的lib/server的jar包替换成classes文件夹
startScripts {
    defaultJvmOpts = ["-Xms512m", "-Xmx2048m"]
    doLast {
        unixScript.text = unixScript.text.replace('lib/' + archivesBaseName + '-' + version + '.jar', 'classes')
        windowsScript.text = windowsScript.text.replace('lib\\' + archivesBaseName + '-' + version + '.jar', 'classes')
    }
}

// 自定义脚本
task updateHostingExtraRunApp(type: CreateStartScripts) {
    defaultJvmOpts = startScripts.defaultJvmOpts
    classpath = startScripts.classpath
}

// 生成classes文件夹,移除server的jar包,最终生成bin, classes, lib三个文件夹
distributions {
    main {
        contents {
            from("$buildDir/classes/java/main") {
                into "classes"
            }
            from("$buildDir/resources/main") {
                into "classes"
            }
            exclude(archivesBaseName + "*.jar")
        }
    }
}

执行命令gradle build,查看build/distributions会有两个压缩文件,压缩文件包含了两个文件夹,bin为启动脚本,classes为工程编译后的文件,lib则是软件jar包和依赖。还可以执行./gradlew installDist生成未压缩文件目录build/install。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值