高版本JDK如何根据自己的工程项目制作JRE以JDK11为例

本文介绍了如何使用JDK11的模块特性,通过gradle打包项目并利用jdeps确定依赖模块,进而使用jlink创建定制化的JRE,以减小Java应用的体积。
摘要由CSDN通过智能技术生成

引言

  我的项目设置关闭显示器时间的工程中https://gitee.com/wallwamusic/customset-moitortime,项目打包为jar以后,作为一个客户端程序,显然直接使用JDK是不合适的,太大了。所以使用JDK11制作一个JRE就行了,根据自己的项目需要制作一个即可。

构建JRE的基础

  高版本JDK目前都是模块化的,模块化的好处在打包JRE的时候好处就体现出来了,可以根据项目工程使用的JDK模块制作项目需要的JRE,打包一个最小项目运行JRE,这样可以减小JAVA应用程序的大小。
  具体的话,高版本的JDK提供扫描JAR包使用的依赖模块工具jdeps,在高版本的JDK安装目录的bin目录下。可以使用jdeps扫描项目对应的jar包,然后使用jlink依据jdeps打印输出的模块制作JRE。

实操制作JRE11

  以我的项目,设置关闭显示器时间的工程https://gitee.com/wallwamusic/customset-moitortime为例。
  首先需要进行项目打包。这个项目我采用gradle进行依赖管理、编译构建(使用maven也是可以的)。在build.gradle文件中,我定义了一个task任务copyJars,使用这个任务可以项目打包,这个任务会把项目依赖的jar包抽离出来,放到build/libs/lib文件中,我不是很喜欢fatjar的方式进行打包。还修改了jar任务,在这个任务中,主要是配置了打包产物manifest文件的属性,定义主类,启动类的,以及一些其他信息。

task copyJars(type: Copy) {
    dependsOn(build)
    from configurations.runtimeClasspath
    into 'build/libs/lib'
}
jar {
    manifest {
        attributes("Main-Class": "com.codelink.MoitorTimeMainApplication")
        attributes("Class-Path": getStrClassPath())
        attributes("Auth": "lihaojie")
        attributes("packingtime": new Date())
    }
}

  接下来进行操作

项目打包为JAR包

  由于此项目我的编程环境必须是windows啦,并且是以wrapper包的方式的使用的gradle。因此有两种方式,一种方式是通过window终端命令行方式进行打包,一种是使用jetbrains idea打包。
  第一种方式演示,在工程项目目录下使用cmd输入以下命令执行,执行以后,打包产物就会输出到build/libs文件夹下

./gradlew clean jar copyJars

执行效果
  第二种方式是使用idea,可视化操作,使用idea提供的gradle操作项,进行操作,也是可以操作打包的
idea操作

使用jdeps确定项目JAR包依赖模块

  打包完毕以后,即可根据打包产物制作项目最小化运行JRE了。在build/libs目录下,使用jdeps执行相关命令,需要配置好jdk环境变量,不让就要使用全路径来进行操作了。输出结果就是项目jar运行所需要的jdk模块。

jdeps -q --multi-release 11 --ignore-missing-deps --print-module-deps lib/*.jar customset-moitortime-1.0.jar

结果

使用jlink根据项目依赖模块信息制作JRE

然后使用jlink制作jre,去jdk的安装目录下,执行下面的命令–add-modules后面跟上我们使用jdeps扫描得到的依赖模块即可,这时候项目运行jre11就制作好了。

./bin/jlink.exe --module-path jmods --add-modules java.base,java.desktop,java.logging,java.naming --output jre

在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值