您好,欢迎访问沃航(武汉)科技有限公司官方网站
一点一点学vart.x(三)
2019-06-17 01:38:01

上一节中我们介绍了一种gradle打包jar的方式,那就是将所有的依赖全部打包到一个文件中去,生成一个比较大的可执行文件,这个方法的好处在于依赖关系容易处理,但是坏处也是显而易见的。那就是,jar文件体积比较大,而且如果是多个可执行的java程序要共用同一个jar文件会比较不方便。

因此,实际生产环境中,使用打包多个jar文件,将依赖全部复制到一个文件中的情况会比较多。

对于这个方法,需要有两步来做,一个是给可执行的jar文件添加class-path属性,另一个是将依赖的jar文件全部复制到jar文件的相对路径中去。

这里需要大家对gradle相对熟悉一点。

jar {
    String classpath = ''
    configurations.runtime.each {classpath = classpath + " libs/"+it.name}
    manifest {
        attributes 'Main-Class': 'Main'
        attributes 'Class-Path': classpath
    }
}

大家可以看到,这里首先没有了from这个属性,取而代之的是manifest中添加了一个Class-Path属性,并且这个Class-Path属性的值是通过遍历configurations.runtime,拼接所有的依赖后,组成的一个classpath字符串,并且添加到manifest的属性中去。

然后添加一个将依赖复制到特定目录的任务,如下:

task copyLibs(type: Copy) {
    delete "build/libs/libs"
    from configurations.runtime
    into "build/libs/libs"
}

最后新建一个任务,用于生成可执行的jar文件,这个任务直接让依赖jar与copyLibs这两个任务,并且将生成的可执行文件搬运到dist目录下去,如下:

task release(type: Copy, dependsOn: [jar, copyLibs]) {
    delete "dist"
    from "build/libs"
    into "dist"
}

完整的build.gradle文件如下:

apply plugin:'java'

repositories {
    mavenCentral()
}

dependencies {
    compile "io.vertx:vertx-core:+"
}

jar {
    String classpath = ''
    configurations.runtime.each {classpath = classpath + " libs/"+it.name}
    manifest {
        attributes 'Main-Class': 'Main'
        attributes 'Class-Path': classpath
    }
}

task copyLibs(type: Copy) {
    delete "build/libs/libs"
    from configurations.runtime
    into "build/libs/libs"
}

task release(type: Copy, dependsOn: [jar, copyLibs]) {
    delete "dist"
    from "build/libs"
    into "dist"
}

最后大家就可以使用命令gradle release去生成可执行的jar文件了。

文章作者:沃航科技

联系我们
地址:
武汉市洪山区蓝晶国际7栋903
QQ:
932773931
电话:
027-59761089-806
手机:
13397158231
邮箱:
jevian_ma@worldflying.cn
×
物联网组态平台
试用账号:123456
试用密码:123456
如需测试更多功能或者有疑问可发送邮件至:jevian_ma@worldflying.cn
×
积木编程平台
试用方式:试用手机号码注册即可使用
如需测试更多功能或者有疑问可发送邮件至:jevian_ma@worldflying.cn