前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >JAVAFX(一) java Module 模块化简介

JAVAFX(一) java Module 模块化简介

作者头像
微笑的小小刀
发布于 2020-05-11 06:26:30
发布于 2020-05-11 06:26:30
2.6K0
举报
文章被收录于专栏:java技术大本营java技术大本营

前言

看过小刀最近朋友圈的小伙伴应该都知道, 最近小刀在写一个桌面的工具包, 可以连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中的类,然后可以对应实例化,或者调用实例中的方法

Jlink

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

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-05-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 java技术大本营 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
javaFX(二)-使用gradle+jdk14创建javafx程序
在上一篇文章中,我们一起学习了jlink和jdk14的模块化. 在本篇文章中,我们一起来学习gradle来新建一个javafx的Hello World 程序.
微笑的小小刀
2020/05/28
4.7K0
Java打包成.exe完美教程
JavaFX 是一个开源的下一代客户端应用平台,适用于基于Java构建的桌面、移动端和嵌入式系统。 它是许多个人和公司的共同努力的成果,目的是为开发丰富的客户端应用提供一个现代、高效、功能齐全的工具包。官方文档: https://openjfx.io/openjfx-docs/#introduction 。
Jensen_97
2023/12/03
4K0
Java打包成.exe完美教程
首发! JDK14之jpackage命令尝鲜
使用场景是面向java桌面端程序打包. 可以让windows/mac 直接双击使用java程序,对系统里面有没有jdk/jre不做要求.
微笑的小小刀
2020/03/11
3.9K0
原 荐 Java9 Module解惑
Java 9 特性以及解决的问题 Java 9 模块化的一个最大的变化体现在Java结构上。 本文将介绍关于“Java 9模块系统的”高级特性。 Java 9 模块化 我们将探讨关于Java 9模块化系统的以下主题: 1.介绍 2.JavaSe9之Jigsaw Project 3.当前Java系统的问题 4.Java9模块系统的特性 5.Jdk9和Jdk8的对比 6.Java9模块化是什么? 7.Java9模块化系统之母 8.Java9和Java8程序的对比。 介绍 Oracle
石奈子
2018/06/13
1.4K0
如何解决升级IntelliJ IDEA后打开项目出错:“module java.base does not open java.lang to unnamed module @1a75e76a“
在本文中,我们将深入探讨IntelliJ IDEA升级后出现的常见问题:“module java.base does not open java.lang to unnamed module @1a75e76a”。通过详细的步骤和代码示例,本文将提供一系列解决策略,帮助开发者克服这一挑战。本文内容涵盖Java模块系统、IntelliJ IDEA配置、JVM参数调整等关键知识点。关键词包括Java, IntelliJ IDEA, 模块系统, 解决方案, 开发工具。
猫头虎
2024/04/25
2.2K0
如何解决升级IntelliJ IDEA后打开项目出错:“module java.base does not open java.lang to unnamed module @1a75e76a“
如何将JVM Docker镜像大小减少至少60%
如果您使用基于JVM的语言(Java、Kotlin、Scala等)已有一段时间,你可能已经注意到,从Java 11开始,Java运行时环境(JRE)不再有单独的发行版。由于这一决定,许多Java开发工具包(JDK)Docker镜像分发商(例如:OpenJDK、Amazon Correto等)不提供JRE作为单独的Docker镜像,使用这些镜像整体Docker镜像大小约为360MB,而实际应用程序Jar包大小约为26MB。在我看来,整个Docker镜像的大小太大了,应用减小它,以便为每个将使用该Docker镜像的人节省空间和网络带宽。现在,让我们看看如何大幅减小Docker镜像的大小。
用户1107783
2023/09/11
1.8K0
如何将JVM Docker镜像大小减少至少60%
【Java 基础篇】Java 模块化详解
Java 9引入了一项重要的功能:模块化(Module System)。模块化是一种将代码和资源封装到可重用和独立的单元中的方法,它有助于改善代码的可维护性、可重用性和安全性。本文将介绍Java模块化的基本概念、如何创建和使用模块以及一些最佳实践。
繁依Fanyi
2023/10/12
8020
【Java 基础篇】Java 模块化详解
【随笔】使用 jpackage 打包 Java 应用程序
jpackage 是 JDK 14 引入的一个工具,旨在帮助开发者将 Java 应用程序打包成原生的可执行文件,支持 Windows、macOS 和 Linux 平台。通过 jpackage,你可以将 Java 应用和其所需的依赖打包在一起,并创建本地安装程序。
框架师
2025/02/21
7660
【随笔】使用 jpackage 打包 Java 应用程序
Jpackage-制作无需预装Java环境的Jar可执行程序
JAR 包要在预装 JRE 环境的系统上执行。如果没有预先安装 JRE 环境,又想直接运行 Java 程序,该怎么办呢?
未读代码
2024/03/13
9670
Jpackage-制作无需预装Java环境的Jar可执行程序
java9 模块化系统小试
JPMS 全称是 Java Platform Module system(Java 平台模块化系统)。它的目的简单直接:编译期间检查和强化封装。随之而来的好处就是及时反馈,不用等到运行时才出现NoClassDefFoundError;局部化影响,便于松耦合的开发和调优,当然还有运行时的安全。
lambeta
2018/08/17
8180
如何解决 Unable to make field private final java.lang.String java.io.File.path accessible: module java问题
猫头虎 在使用 Java 9 及以上版本时,模块化(Module System)带来的反射限制常会导致如下异常:
猫头虎
2025/06/09
4980
【Java】A Guide to Java 9 Modularity
近期在 Baeldung 看到了一篇有关Java9模块化入门介绍的文章,整体翻译加理解下来发现确实不错,个人认为美中不足的是项目构建过于简单和偏手动,个人建议找一些简单的Java9以及之上的开源项目结合参考使用更佳。
阿东
2023/06/27
2340
【Java】A Guide to Java 9 Modularity
成功优化!Java 基础 Docker 镜像从 674MB 缩减到 58MB 的经验分享
成功优化!Java 基础 Docker 镜像从 674MB 缩减到 58MB 的经验分享
程序员皮皮林
2024/11/05
5221
成功优化!Java 基础 Docker 镜像从 674MB 缩减到 58MB 的经验分享
解决idea运行javafx报错:缺少 JavaFX 运行时组件
在 Java 开发中,尤其是使用 JDK 11 及以后的版本,可能会遇到这样的错误提示:“缺少 JavaFX 运行时组件,需要使用该组件来运行此应用程序”。这是因为从 JDK 11 开始,JavaFX 被从 JDK 中剥离出来,需要开发者手动添加。
代码先觉
2024/12/26
4.3K0
JavaFX——(第一篇:介绍篇)
什么是JavaFX JavaFx平台是一个富客户端平台解决方案,它能够使用应用程序开发人员轻松的创建跨平台的富客户端应用程序。它构建在Java技术的基础之上,JavaFX平台提供了一组丰富的图形和媒体API与高性能硬件加速图形和媒体引擎,简化开发数据驱动的企业客户端应用程序。 JavaFX有以下优点: 因为JavaFX平台是用Java编写的,Java开发人员可以利用现有的技能和工具来开发JavaFX应用程序。 因为java是广泛使用的,所以很容易找到能轻易将JavaFX应用变成产品的开发人员。 因为跟Jav
cloudskyme
2018/03/20
7.7K0
JavaFX——(第一篇:介绍篇)
Java9新特性——module模块系统
官方文档:https://docs.oracle.com/javase/9/index.html
pollyduan
2019/11/04
3.2K0
Java9新特性——module模块系统
深度解析Java 9核心新特性
避免对文章进行过度解读,因为每个人的知识结构和认知背景都不同,没有一种通用的解决方案。
公众号:码到三十五
2024/05/06
2370
深度解析Java 9核心新特性
Java 9的模块系统到底怎么用
Java 的模块在Java 9中正式实装,一直没时间来研究一下这个东西,今天就和大家一起学习一下这个功能。
码农小胖哥
2022/04/06
1.4K0
Java 9的模块系统到底怎么用
JAVA9模块化详解(一)——模块化的定义
java9已经出来有一段时间了,今天向大家介绍一下java9的一个重要特性——模块化。模块化系统的主要目的如下:
小忽悠
2018/08/27
5840
模块化的优势:JDK 17与JDK 21中模块化如何提升项目维护性与性能?
模块化是现代Java开发的重要趋势,从JDK 9引入的模块化系统(JPMS),到JDK 17与JDK 21的增强,开发者逐步认识到模块化对代码结构优化与性能提升的巨大作用。
猫头虎
2024/12/26
4050
推荐阅读
相关推荐
javaFX(二)-使用gradle+jdk14创建javafx程序
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档