jar包的精细化运营,Java模块化简介

这篇具有很好参考价值的文章主要介绍了jar包的精细化运营,Java模块化简介。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


图:模块化手机概念

一、什么是Java模块化

Java模块化(module)是Java9及以后版本引入的新特性。

官方对模块的定义为:一个被命名的,代码和数据的自描述集合。( the module, which is a named, self-describing collection of code and data)。

早在Java7的时候就被提出,但由于其复杂性,不断跳票,直到Java9才有,那么Java模块化到底是什么,在实际开发中又有什么用呢?

简单来说,就是把jar进一步掰碎。

一个jar可以有多个module,一个module可以有多个package。
从代码结构上看,jar > module > package > class/interface。

那么怎么掰碎Jar包呢?

Java从自身做了一个典范,把JDK里面大部分Jar都掰成了一个个module

JDK1.8结构:

JDK17将其拆成一个一个jmod:

而且,官方提供了文档对每一个模块进行了介绍:

模块 描述
java.base 定义 Java SE 平台的基础 API。
java.compiler 定义语言模型、注释处理和 Java 编译器 API。
java.datatransfer 定义用于在应用程序之间和应用程序内传输数据的 API。
java.desktop 定义 AWT 和 Swing 用户界面工具包,以及用于 辅助功能、音频、成像、打印和 JavaBeans。
java.instrument 定义允许代理 检测在 JVM 上运行的程序。
java.logging 定义 Java 日志记录 API。
java.management 定义 Java 管理扩展 (JMX) API。
java.management.rmi 定义 Java 管理扩展插件 (JMX) 远程 API 的 RMI 连接器。
java.naming 定义 Java 命名和目录接口 (JNDI) API。
java.net.http 定义 HTTP 客户端和 WebSocket API。
java.prefs 定义首选项 API。
java.rmi 定义远程方法调用 (RMI) API。
java.scripting 定义脚本 API。
java.se 定义 Java SE 平台的 API。
java.security.jgss 定义 IETF 通用安全服务 API (GSS-API) 的 Java 绑定。
java.security.sasl 定义对 IETF 简单身份验证和安全层的 Java 支持 (萨斯尔)。
java.smartcardio 定义 Java 智能卡 I/O API。
java.sql 定义 JDBC API。
java.sql.rowset 定义 JDBC 行集 API。
java.transaction.xa 定义用于在 JDBC 中支持分布式事务的 API。
java.xml 定义 Java API for XML Processing (JAXP)、Streaming API for XML (StAX), XML 的简单 API (SAX) 和 W3C 文档对象模型 (DOM) API。
java.xml.crypto 定义 XML 加密的 API。
jdk.accessibility 定义辅助技术实现者使用的 JDK 实用程序类。
jdk.attach 定义附加 API。
jdk.charset 提供字符集 不在(主要是双字节和 IBM 字符集)。java.base
jdk.compiler 定义系统 Java 编译器及其命令行等效项 javac 的实现。
jdk.crypto.cryptoki 提供 SunPKCS11 安全提供程序的实现。
jdk.crypto.ec 提供 SunEC 安全提供程序的实现。
jdk.dynalink 定义用于动态链接对象高级操作的 API。
jdk.editpad 提供 jdk.jshell 使用的编辑板服务的实现。
jdk.hotspot.agent 定义热点功能配置代理的实现。
jdk.httpserver 定义特定于 JDK 的 HTTP 服务器 API。
jdk.jartool 定义用于操作 Java 归档 (JAR) 文件的工具, 包括 jar 和 jarsigner 工具。
jdk.javadoc 定义系统文档工具及其命令行等效项 javadoc 的实现。
jdk.jcmd 定义用于诊断和排除 JVM 故障诊断的工具 如JCMD,JPS,JSTAT工具。
jdk.jconsole 定义 JMX 图形工具,jconsole, 用于监视和管理正在运行的应用程序。
jdk.jdeps 定义用于分析 Java 库和程序中依赖关系的工具, 包括 JDEPS、JavaP 和 JDEPRSCAN 工具。
jdk.jdi 定义 Java 调试接口。
jdk.jdwp.agent 提供 Java 调试线路协议 (JDWP) 代理的实现。
jdk.jfr 定义 JDK 飞行记录器的 API。
jdk.jlink 定义用于创建运行时的 jlink 工具 图像,用于创建和操作的 JMod 工具 JMOD文件,以及用于检查的jimage工具 类和资源的特定于 JDK 实现的容器文件。
jdk.jshell 此模块提供对 Java 编程语言“片段”评估工具,例如 读取-评估-打印循环 (REPL),包括 jshell 工具。
jdk.jsobject 定义 JavaScript 对象的 API。
jdk.jstatd 定义用于启动守护程序的 jstatd 工具 用于远程监控 JVM 统计信息的 JSTAT 工具。
jdk.localedata 提供美国区域设置以外的区域设置的区域设置数据。
jdk.management 为 JVM 定义特定于 JDK 的管理接口。
jdk.management.agent 定义 JMX 管理代理程序。
jdk.management.jfr 定义 JDK 飞行记录器的管理接口。
jdk.naming.dns 提供 DNS Java 命名提供程序的实现。
jdk.naming.rmi 提供 RMI Java 命名提供程序的实现。
jdk.net 定义特定于 JDK 的网络 API。
jdk.pack 定义用于将 JAR 文件转换为压缩包200 文件的工具 并将打包文件转换为 JAR 文件,包括 pack200 和 unpack200 工具。
jdk.rmic 定义用于生成存根的 rmic 编译器和 对远程对象使用 Java 远程方法协议 (JRMP) 的框架。
jdk.scripting.nashorn 提供 Nashorn 脚本引擎的实现和 用 ECMAScript 5.1 编写的程序的运行时环境。
jdk.sctp 为 SCTP 定义特定于 JDK 的 API。
jdk.security.auth 提供接口和各种身份验证模块的实现。javax.security.auth.*
jdk.security.jgss 定义 GSS-API 的 JDK 扩展和 SASL 的实现 GSSAPI机制。
jdk.xml.dom 定义不属于一部分的 W3C 文档对象模型 (DOM) API 的子集 的 Java SE API。
jdk.zipfs 提供 zip 文件系统提供程序的实现。

以上是机器翻译,原文:https://docs.oracle.com/en/java/javase/11/docs/api/index.html

二、模块化有什么好处

好处就是将jar的功能精细化,可以按需使用。

猜测是为了解决Java项目尤其是JVM一直被诟病比较臃肿的问题,怎么解决臃肿呢?砍就完了!

  • 进一步规范Java的依赖

  • 按需使用,最小化加载,减少冲突,减小Java应用大小

  • 可以对耦合性封装性进一步约束

  • 使调用权限管理更清晰,提高系统的安全性

精简JRE就是模块化一个典型的应用:
1、maven编译,打包项目,打包依赖jar到libs
2、使用新版JDK自带的jdeps找出依赖的模块
3、使用新版JDK自带的jlink制作自定义JRE

三、如何创建模块

1、创建一个Java项目或者module

2、在代码根路径下创建文件module-info.java

定义模块名称,依赖的模块,以及导出的模块

3、编译Java项目

在编译后的目录中可以看到module-info.class文件

4、创建jmod文件

使用jmod create命令:

命令格式:
jmod create --class-path module-info.class文件对应的路径 输出的jmod文件名

四、如何启动可执行模块

上面咱们创建的模块中是有Main入口的可执行模块,
那么能不能像java -jar一样执行这个模块呢?

答案是肯定的:

使用java --module命令:

命令格式:
java --module-path 模块文件所在路径 模块名称/包名.main类名

执行后,就可以把java程序给运行起来啦:

五、既然这么好,我们常用的Spring有没有支持?

看到这里,同学们可能发现了,这需要整个Java生态开发者所有人按规范对自己的Jar进行模块化才能达到最优效果,而且实际开发过程中定义和管理自己的模块及模块之间的依赖关系是比较复杂的事情。

这里有一个关于Java模块化算不算复杂以及有没有必要的知乎问题,供大家参考:
https://www.zhihu.com/question/610866431?utm_id=0

那么我们常用的Spring有没有被模块化打动,也按规范进行模块化了呢?
至少到Spring5还没有,但是这里有一些答案:

1:Declare Spring modules with JDK 9 module metadata

SpringFramework官方的回答:
https://github.com/spring-projects/spring-framework/issues/18079

机器翻译:JDK 9的Jigsaw计划旨在允许将模块元数据(module-info.java)添加到框架和库jar中,同时保持它们与JDK 8的兼容性。让我们对Spring Framework 5.0的模块尽可能地这样做。然而,我们可能无法以这种方式表达我们的可选依赖安排,在这种情况下,我们可能不得不采用“自动模块”方法来实现#18289中更温和的目的。

2:Any plans for Java 9 Jigsaw (module) of Spring projects?

https://stackoverflow.com/questions/43685081/any-plans-for-java-9-jigsaw-module-of-spring-projects

作者:京东科技 周波

来源:京东云开发者社区 转载请注明来源文章来源地址https://www.toymoban.com/news/detail-741716.html

到了这里,关于jar包的精细化运营,Java模块化简介的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 利用甘特图实现精细化项目管控

    在项目管理中,通过精细化管控,项目经理能够有效规划、监督和协调各项任务,从而最大限度控制风险,优化资源配置,并确保按时、按质、按量完成项目目标。而在众多项目管理工具中,甘特图无疑是实现精细化项目管控的利器。zz-plan 是一个非常好用的在线甘特图制作工具,一

    2024年04月14日
    浏览(33)
  • 财务共享中心搭建以后,如何进行精细化管理?

    财务共享中心通过统一的财务流程、系统和人员配置实现了财务业务的标准化和规范化,为企业的财务管理提供了很大的便捷性和效率性,目前许多大型企业已纷纷开始搭建自己的财务共享中心。 但企业在搭建财务共享中心之后,往往会在运行初期遇上业务和财务脱节、财务

    2024年02月07日
    浏览(36)
  • 如何通过CRM销售系统精细化管理客户?

      粗放式的客户管理会使企业失去许多潜在客户,这是许多管理者头疼的问题。与之对应的精细化管理,关键在于提升品质、降低成本、优化流程, 接下来我们就来聊一聊,如何通过CRM销售管理系统精细化管理客户。 一、客户数据库管理 在销售管理系统的帮助下,员工可以

    2024年02月08日
    浏览(41)
  • 金融客户敏感信息的“精细化管控”新范式

    目    录   01  客户信息保护三箭齐发,金融IT亟需把握四个原则‍ 02  制度制约阻碍信息保护的精细化管控 ‍‍‍‍‍‍‍ 03   敏感信息精细化管控范式的6个关键设计  04   分阶段实施,形成敏感信息管控的长效运营的机制 05   未来,新挑战与新机遇并存 01‍ 加强客户信

    2024年02月11日
    浏览(35)
  • 传感云智慧公厕综合解决方案,实现公厕精细化管理

    随着国家“公厕革命”建设工作的持续推动与科技创新技术的不断进步,人们对“方便”与“卫生”的要求越来越高,智慧公厕已然成为智慧城市建设规范下的公共厕所新形态,不仅可以解决传统公厕的脏乱差、异味和管理难题,同时可以为用户提供舒适的如厕体验。   那么

    2024年02月05日
    浏览(36)
  • 无人机精细化巡检方案制定:提高效率与准确性的关键

    1. 精细化巡检的需求背景 效率与安全并重:传统的人工巡检面临时间消耗大、安全风险高等问题。而无人机巡检可以在较短时间内完成大面积的检查工作,并避免人员直接面对潜在的高风险环境。 细致与全面:随着技术的进步,越来越多的组织意识到精细化巡检的必要性。

    2024年02月11日
    浏览(26)
  • 城市精细化治理过程中的智能图像识别如何更精准、更智能?

    城市精细化治理任务旨在通过人工智能(AI)技术对城市治理过程中出现的问题事件(例如道路破损、垃圾乱放、占道经营等)进行智能图像识别,为城市治理人员针对性开展工作提供技术支持。 · 数据标注通常以事件标签标注+特定目标物矩形框标注形式呈现。 · 相关算法

    2023年04月08日
    浏览(33)
  • k8s通过sa和自建角色实现权限精细化分配

    角色role-sa 具有的权限仅仅是namespace planck内的所有pod的查看权限,以及deployment的查看权限,无权删除修改这些资源 为什么要授权是因为sa内的secrets里的token只有在dashboard内使用,而上面的角色和角色绑定都是dev这个namespace内的,这样绑定后,拿到token才可以登录到dashboard的首

    2024年02月13日
    浏览(31)
  • k8s通过系统配置文件kubeconfig文件实现权限的精细化分配

    k8s的apiserver地址为:https://xxx:6443 token=“xxx” cfssl 安装 cfssljson 安装 生产证书 1.设置集群参数 config文件引入集群ca证书,这里的set-cluster 可以任意设置,想叫什么集群名字都可以,我这里定义为mykubernetes,kubeconfig文件名称也随意定义,我这里定义为test.kubeconfig,此命令执行后

    2024年02月13日
    浏览(34)
  • java智慧工地云平台源码,以物联网、移动互联网技术为基础,结合大数据、云计算等,实现工程管理绿色化、数字化、精细化、智能化的效果

    智慧工地将更多人工智能、传感技术、虚拟现实等高科技技术植入到建筑、机械、人员穿戴设施、场地进出关口等各类物体中,围绕人、机、料、法、环等各方面关键因素,彻底改变传统建筑施工现场参建各方现场管理的交互方式、工作方式和管理模式,智慧工地主要以物联

    2024年02月08日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包