热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

初探jdk11中的module,jmod,jlink

当时听到jdk11发布之后,立马就下载下来了,然后把原来的jdk8切成11之后,程序还是可以照样的跑,算是一个平稳的过渡,但是有些代码做了改变,如MD5

当时听到jdk11发布之后,立马就下载下来了,然后把原来的jdk8切成11之后,程序还是可以照样的跑,算是一个平稳的过渡,但是有些代码做了改变,如MD5加密的,在jdk8调用时,就提示这个是内部函数,可能会在以后的发行版本中删除。再如Unsafe的获取方法,在jdk8中可以通过反射来获取,在jdk11中, Unsafe被移到了jdk.unsupport里面了,可以通过以下代码来尝试获取:

       Field unSafeField = null;
       try {
           unSafeField = Unsafe.class.getDeclaredField("theUnsafe");
           unSafeField.setAccessible(true);
           Unsafe unsafe = (Unsafe) unSafeField.get(null);
           System.out.println(unsafe);
       } catch (NoSuchFieldException | IllegalAccessException e) {
           e.printStackTrace();
       }

新的变量声明方式

以前老师教我们,写java时,声明的变量类型要和new的变量类型一致,在11中放松了这一限制,(是11还是10里面就放松了我也记不太清楚了,反正就是现在放松了)对比见以下代码

//jdk8及以前的写法
Integer a = Integer.valueOf(1);
//jdk11 的写法
var b  = Integer.valueOf(2);

写法虽然简化了,但说实话,笔者个人还是更喜欢以前的写法,因为以前的写法可以声明的啥一目了然。

新的打包方式

这一段停顿了好几天才开始写,因为国内相关的资料很少,爬了好久的google的坑才算是运行了出来  

大家都知道从jdk9开始,java转成了模块化。写代码时需要添加一个描述性的文件module-info.java,这个文件描述了我们需要哪些模块,然后把当前模块的哪些包设置为可以被引用(相当于public )

编译

代码还是和以前maven的项目一样的写,然后编译也是一样的编译,用javac 或者maven的compile,我们得到了 target/classes目录  

创建jmod

创建也很简单,使用jmod create命令:jmod create --class-path target/classes jmod/utils-base.jmod

其中 --class-path 是对应着我们编译出来的.class 文件,后面是生成的jmod文件存放的地方

执行完我们会看到这样一个文件:其作用,可以简单理解为和.jar一样的作用

生成运行时镜像

看这个标题感觉很高大上,对这个概念我的理解是打包成一个可以运行的东西出来,如标题所示,生成好一个镜像后,然后带着镜像就可以到处跑,到处运行了。在示例项目中,utils-se 依赖utils.base , utils.base刚才已经打好了一个jmod出来,现在我们要对utils.se创建镜像

创建运行时镜像主要是使用jlink命令:jlink --module-path D:/javafx-jmods-11.0.1;../utils-base/jmod;jmod --add-modules=utils.fx --output jfx

--module-path 是依赖的jmod路径,因为我这是一个javaFX程序,所以还依赖了javafx-jmods。  

--add-modules添加当前的模块  

--output jfx是输出的文件夹

执行完命令之后,我们可以看到目录有以下变化:

我们要的可执行文件,就在bin里面

运行

创建好镜像后,我们来运行看看,运行就用平常的java就可以啦:jfx\bin\java -m utils.fx/fx.ideashare.jfx.JFXMain  

-m是指定模块 后面是 ${模块名}/${包名}.${Main函数}。执行后,就可以把java程序给运行起来啦:

这是我做的一个小工具,因为在windows上markdown写作时,没有mac上的ipic可以上传图床,然后就自己弄了一个,可以监听剪贴板上的文件,然后上传到服务器,返回一个可访问的链接。

总结

爬坑的道路很漫长,官方文档说的太抽象,国内没有什么例子,国外也没太多的例子,可能那些大牛们觉得这个太简单不想写吧,但总算是一步步的做了出来,特此做成一个小记和大家分享下


推荐阅读
  • Java和JavaScript是什么关系?java跟javaScript都是编程语言,只是java跟javaScript没有什么太大关系,一个是脚本语言(前端语言),一个是面向对象 ... [详细]
  • 本文介绍了一个免费的asp.net控件,该控件具备数据显示、录入、更新、删除等功能。它比datagrid更易用、更实用,同时具备多种功能,例如属性设置、数据排序、字段类型格式化显示、密码字段支持、图像字段上传和生成缩略图等。此外,它还提供了数据验证、日期选择器、数字选择器等功能,以及防止注入攻击、非本页提交和自动分页技术等安全性和性能优化功能。最后,该控件还支持字段值合计和数据导出功能。总之,该控件功能强大且免费,适用于asp.net开发。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 原文地址:https:www.cnblogs.combaoyipSpringBoot_YML.html1.在springboot中,有两种配置文件,一种 ... [详细]
  • C# 7.0 新特性:基于Tuple的“多”返回值方法
    本文介绍了C# 7.0中基于Tuple的“多”返回值方法的使用。通过对C# 6.0及更早版本的做法进行回顾,提出了问题:如何使一个方法可返回多个返回值。然后详细介绍了C# 7.0中使用Tuple的写法,并给出了示例代码。最后,总结了该新特性的优点。 ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • 关键词:Golang, Cookie, 跟踪位置, net/http/cookiejar, package main, golang.org/x/net/publicsuffix, io/ioutil, log, net/http, net/http/cookiejar ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 本文介绍了在多平台下进行条件编译的必要性,以及具体的实现方法。通过示例代码展示了如何使用条件编译来实现不同平台的功能。最后总结了只要接口相同,不同平台下的编译运行结果也会相同。 ... [详细]
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
  • 集成电路企业在进行跨隔离网数据交换时面临着安全性问题,传统的数据交换方式存在安全性堪忧、效率低下等问题。本文以《Ftrans跨网文件安全交换系统》为例,介绍了如何通过丰富的审批流程来满足企业的合规要求,保障数据交换的安全性。 ... [详细]
  • GreenDAO快速入门
    前言之前在自己做项目的时候,用到了GreenDAO数据库,其实对于数据库辅助工具库从OrmLite,到litePal再到GreenDAO,总是在不停的切换,但是没有真正去了解他们的 ... [详细]
author-avatar
mobiledu2502918113
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有