专栏首页java技术大本营JAVAFX(一) java Module 模块化简介

JAVAFX(一) java Module 模块化简介

前言

看过小刀最近朋友圈的小伙伴应该都知道, 最近小刀在写一个桌面的工具包, 可以连k8s, 可以做图床等等, 其中用到的技术栈就是 jdk14+javaFX.

JDK14(Module)+javaFx

JDK14(Module)

选用JDK14 , 主要是因为其中的jpackage命令, 这个命令可以帮我们把java程序打包成win中的exe , 打包成mac 中的dmg, pkg . 这样使用者就不需要再单独安装jdk/jre了, 加上java9之后java的module化, 可以最大程度上的精简jre, 虽然是精简了,但实际上,大家可以看到, 每次我在群里面发的包,还是接近100MB了.

javaFX

java身为一个跨平台语言,我们对其更多直观的感受是在win/mac 上写了一个springboot的程序, 然后丢到win/linux服务器上去运行. 不仅仅是服务端应用, 桌面端应用也可以这样跨平台. 用上面用jpackage打包之后的应用, 在不同的平台上打的包, 可以在不同的平台上运行. 虽然在UI/字符显示上会有些许差别,但是差别不怎么大. 可以通过接口-不同平台实现类的方式进行处理.

系统配置要求

本文及后续文章系统要求:

jdk14(为了使用jpackage命令),

idea社区版2020.1或以上(这个版本开始支持jdk14),

gradle 6.3及以上(gradle 6.3开始支持jdk14)

小刀的交流群(一个人踩坑? 踩的想砸电脑.....)

java Module

模块化和非模块化的区别,在代码的体现上就是module-info.java的区别

如上图所示: 该文件的关键在于三个关键字(requires, opens, export) , 因为我们这个项目已经是最上层模块, 不需要为别的模块提供方法, 所以没有用到export关键字.

requires: 我们这个模块(模块名: red.lixiang.tools.sunflower) 需要javafx.controls和javafx.fxml模块

opens: 主要是反射使用,javafx.fxml可以反射red.lixiang.tools.sunflower中的类,然后可以对应实例化,或者调用实例中的方法

在java 模块化中, jlink命令是核心,其作用就是把jdk中我们需要模块抽出来, 把我们自己引入的模块给打包一起,然后生成一个image(可运行的镜像), 这个有gradle插件帮我们完成. 我们只需要知道这个命令作用即可,生成之后的文件如下:

我们可以在lib文件夹中看到modules这个文件, 就是合并之后的模块依赖, 这时候, 要运行这个程序,只需要运行bin目录下的Sunflower/Sunflower.bat 就可以了.

jlink的作用,我们可以用上图表示, 把项目的requires的打包到lib中的modules中, 把jdk中相关的命令打包到 image文件夹中.

本文分享自微信公众号 - java技术大本营(java-ideashare),作者:微笑的小小刀

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-05-04

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • JAVA学习册|基础语法|cmd输出HelloWorld

    很多老师的书和视频中,在安装完jdk,配置好环境变量,都会带大家用记事本写一个HelloWorld,然后在cmd中来编译,运行,来,我们来一起再做一遍

    微笑的小小刀
  • java练习本(2019-08-06)

    “ Love seems the swiftest, but it is the slowest of growths. No man or woman rea...

    微笑的小小刀
  • JVM | OpenJDK源码执行HelloWorld

    平时我们在运行java程序时, 一般有两种选择, 1是在服务器上直接用java -jar 命令来运行程序, 2是在idea中直接点击运行/debug,如下图所示...

    微笑的小小刀
  • Subfinder:一个子域名发现工具,可以为任何目标枚举海量的有效子域名

    SubFinder是一个子域发现工具,可以为任何目标枚举海量的有效子域名。它已成为sublist3r项目的继承者。SubFinder使用被动源,搜索引擎,Pas...

    FB客服
  • Firefox 即将启用全新 logo 设计

    Mozilla 的 Firefox 经过多年沉淀,其 logo 已成为 PC 用户最容易识别的标识之一。尽管 Firefox 之前也有陆续给其 logo 进行了...

    明月云服务
  • android:scaleType属性

    ImageView.ScaleType.CENTER|android:scaleType="center" 以原图的几何中心点和ImagView的几何中心点为...

    郭耀华
  • 推荐几个在线学习的平台

    http://www.jikexueyuan.com/ 极客学院,各种学习资料,但是视频大部分收费的,如果有特别想看的课程可以学习,实在不行看看wiki。 h...

    春哥大魔王
  • 【图像分割模型】多分辨率特征融合—RefineNet

    这是专栏《图像分割模型》的第8篇文章。在这里,我们将共同探索解决分割问题的主流网络结构和设计思想。

    用户1508658
  • JS判断单、多张图片加载完成

    在实际的运用中有这样一种场景,某资源加载完成后再执行某个操作,例如在做导出时,后端通过打开模板页生成PDF,并返回下载地址。这时前后端通常需要约定一个flag,...

    疯狂的技术宅
  • 游戏设计模式——Unity事件队列(纪念京阿尼事件)

    在游戏开发过程中,经常会出现不同板块之间的信息交流,或是存在“当...,就...”的情况,事件队列编程模式可以有效解决消息传递中产生的脚本耦合问题,让同一个板块...

    汐夜koshio

扫码关注云+社区

领取腾讯云代金券