jdk 11 模块系统_JDK 9:模块系统状态的重点

jdk 11 模块系统

马克·雷因霍尔德 ( Mark Reinhold )的“模块系统状态 (SOMS)”已于本月初发布,它提供了信息丰富的可读性“对Jigsaw项目中原型的Java SE平台进行了增强的非正式概述,并被提议作为JSR 376的起点。” 在本文中,我总结并强调了阅读文档时发现有趣的一些概念和术语。

  • 模块系统状态指出Java开发人员将定期使用文档中讨论的功能的子集。 这些功能和概念是“模块声明,模块化JAR文件,模块图,模块路径和未命名模块”。
  • 模块是“一种基本的新型Java程序组件”,它是“一个自命名的,代码和数据的自定义集合”。
  • “一个模块声明它需要哪些其他模块才能进行编译和运行。”
    • requires关键字似乎类似于OSGI的要求,捆绑或进口包装
  • “一个模块声明了......其打包出口 ”到其他模块。
    • exports关键字似乎类似于OSGI的Export-Package 。
  • 模块声明是“ Java编程语言的新构造”,提供了“模块的自我描述”。
    • 惯例是将“模块声明的源代码”放置在“模块源文件层次结构根目录中名为module-info.java的文件中”。
  • “模块名称,如程序包名称,不得冲突。”
  • “模块的声明不包含版本字符串,也不包含对其依赖的模块的版本字符串的约束。”
  • 模块化的JAR文件在所有可能的方式上都与普通的JAR文件类似,除了它的根目录中还包含module-info.class文件。”
  • “模块化的JAR文件允许库的维护者发布单个工件,该工件既可以在Java 9及更高版本上作为模块使用,又可以在所有版本中作为类路径上的常规JAR文件使用。”
  • 基本模块定义并导出了平台的所有核心软件包”,“被命名为java.base ,”是“模块系统唯一已知的唯一模块”,“始终存在”,并由所有其他模块所依赖,并且不依赖其他模块。
  • 所有“平台模块”均以“ java. ”开头java. 前缀和“可能包括“用于数据库连接的 java.sql ,用于XML处理的 java.xml和用于日志记录的 java.logging 。”
  • 前缀“ jdk. ”应用于“ Java SE 9平台规范中未定义的模块”,但“特定于JDK”的名称。
  • 隐含可读性 :关键字public可以在之后添加requires关键字状态给定的模块的模块读取可以通过读取它依赖模块读取。 换句话说,如果模块B根据requires public引用了模块C提供的包,则该包可由可以读取模块B的模块A读取。
  • 通过使用关键字的在Java模块系统便于“经由服务接口和服务提供商的程序组件的松耦合” provides ... with ...以指示何时一个模块提供的服务的实现,并通过使用关键字uses指示模块何时使用提供的服务。
  • 因为给定的类与单个模块关联,所以Class::getModule()将允许访问类的关联模块。
  • “每个类加载器都有一个唯一的未命名模块 ”,从中加载与模块公开的包无关的类型。 可以使用新方法ClassLoader::getUnnamedModule检索给定的类加载器的未命名模块。
    • 未命名的模块可以读取所有其他模块,并且可以被所有其他模块读取。
  • “ JMOD”是“新工件格式”的“临时”名称,“新工件格式”“超出JAR文件”,用于保存“本机代码,配置文件和其他自然不适合…放入JAR文件中的数据”。 目前,这是作为JDK的一部分实现的,以后可能会在Java SE中进行标准化。

上面概述的项目不包括“模块系统状态”中涵盖的“高级主题”,例如合格的出口,增加的可读性和层次。 原始文档也值得一读,因为它具有更深入的说明,简短的代码清单和说明性图形。

拼图项目和OSGi

像OSGi一样,Project Jigsaw旨在在基于Java的应用程序中实现更大的模块化。 我期待看到内置的模块化支持是否可以提供与OSGi提供的某些相同的优点,同时消除或减少与OSGi相关的一些缺点。 杰西卡·桑恩斯比(Jessica Thornsby)在Mule Drop OSGi For Beo 太复杂的文章中总结了一些开发人员对OSGi的劣势的看法,这些想法导致Spring和Mule等停止使用OSGi。 Thornsby的文章引用了Dmitry Sklyut , Kirk Knoerschild和Ian Skerrett的话 ,他们认为更好的工具,更好的文档(包括社区),在会议上的更多了解以及通过使用的更多熟悉程度将有助于OSGi的采用,并有助于克服被认为是艰难的学习曲线和复杂性。

我很好奇,如果Java平台内置的模块化功能几乎可以自动带来OSGi倡导者认为可以提高OSGi的采用率的某些功能。 我怀疑通过将Jigsaw内置到平台中,它会提供更好的工具支持,更好地面向一般Java开发人员,并且会在Java开发人员社区(博客,会议,书籍等)中得到更广泛和广泛的覆盖。 凭借这些优势,我还想知道Java 9和Jigsaw是否会导致OSGi的当前用户离开OSGi,或者这些用户是否会找到创造性的方式来将两者一起使用或会做自己想做的事情(例如使用未命名的模块)使用OSGi而不是拼图。 由于OSGi可以在Java 9之前的Java版本上使用,而Jigsaw仅在Java 9和更高版本上可以使用,因此在Java 9的采用逐渐升温之前,不必急于将基于OSGi的应用程序迁移到Jigsaw。 Java 9中的模块化:与Project Jigsaw,Penrose和OSGi堆叠在一起,可以对当前和即将到来的Java模块化方法进行有趣的讨论。

引用/相关资源

  • 模块系统的状态
  • Mark Reinhold的“ Java 9模块状态”的要点 (包括视频)
  • Java模块系统:初步了解
  • 拼图快速入门
  • Java 9中的模块化:与Jigsaw,Penrose和OSGi堆叠

翻译自: https://www.javacodegeeks.com/2015/09/jdk-9-highlights-from-the-state-of-the-module-system.html

jdk 11 模块系统

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/337171.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【如何系统地学习 C++ 语言】从开发环境到C++进阶,应该怎么办?

点击蓝字关注我们因公众号更改推送规则,请点“在看”并加“星标”第一时间获取精彩技术分享来源于网络,侵删开发环境如前面介绍的那样,C属于一种静态的编译型语言,所以,开发环境配置过程中就需要用到对应的编译器。C有…

小学生在家自学python_小学生都能学会的python(函数)

小学生都能学会的python(函数)神马是函数函数: 对功能或者动作的封装函数的定义def 函数名(形参列表):函数体(return)ret 函数名(实参列表)函数的返回值return,只要执行到return 函数的本次调用就会被停止1.如果函数不写return, 没有返回值。…

高度可定制化的方案_如何开发高度可定制的产品

高度可定制化的方案您是否听说过:“我们非常喜欢您的产品……除了一些小细节。”? 然后,CIO推出了一系列其他“必备”要求的清单,其中有数百个要添加到您的惊人产品中。 您是否听说过,甚至说过:“团队&…

文言文编程?厉害了程序员!

点击蓝字关注我们因公众号更改推送规则,请点“在看”并加“星标”第一时间获取精彩技术分享来源于网络,侵删你能看出来,这首诗妙在哪里吗?来源:量子位(ID:QbitAI),梦晨 萧…

sublime快捷键代码对齐_Python配置sublime运行环境

1、下载安装python和sublime,不再赘述,官网即可下载;2、打开subilme,打开Tools > Build System > New Build System..3、点击New Build System后,会生成一个空配置文件,在这个配置文件内覆盖配置信息…

C语言贪心算法

点击蓝字关注我们因公众号更改推送规则,请点“在看”并加“星标”第一时间获取精彩技术分享来源于网络,侵删01基本概念贪心算法是指在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,…

spark有什么作用_Spark 101:它是什么,它做什么以及为什么起作用

spark有什么作用最近,许多大数据的讨论都使用了新名称。 有人认为流行的新手Apache Spark ™是Hadoop的更易访问,更强大的替代品, Hadoop是大数据的首选原始技术。 其他人则认为Spark是Hadoop和其他技术的有力补充,它具有自己的优…

python中比较运算符怎么使用_实例说明Python中比较运算符的使用

下表列出了所有Python语言支持的比较操作符。假设变量a持有10和变量b持有20,则:例如:试试下面的例子就明白了所有的Python编程语言提供的比较操作符:#!/usr/bin/pythona 21b 10c 0if ( a b ):print "Line 1 - a is equal…

C++最佳实践 | 可维护性

点击蓝字关注我们因公众号更改推送规则,请点“在看”并加“星标”第一时间获取精彩技术分享来源于网络,侵删C最佳实践:1. 工具2. 代码风格3. 安全性4. 可维护性(本文)5. 可移植性及多线程6. 性能7. 正确性和脚本可维护性避免使用编…

rx.observable_使用Java 8 CompletableFuture和Rx-Java Observable

rx.observable我想探索一个使用Java 8 CompletableFuture和Rx-Java Observable的简单分散聚集场景。 场景很简单–产生大约10个任务,每个任务返回一个字符串,最终将结果收集到一个列表中。 顺序的 其顺序版本如下: public void testSequen…

springboot启动自动关闭_App自动化测试用例格式和App的启动与关闭

【一】基本的用例格式这里使用unittest测试框架来编写用例。注:unittest可以提供用例的组织和管理、预期结果验证、批量化运行、产生测试报告等功能。新建一个calculator的python package,新建一个calculator_test.py,导入以下包。按照标准的…

C++最佳实践 | 可移植性及多线程

点击蓝字关注我们因公众号更改推送规则,请点“在看”并加“星标”第一时间获取精彩技术分享来源于网络,侵删C最佳实践:1. 工具2. 代码风格3. 安全性4. 可维护性5. 可移植性及多线程(本文)6. 性能7. 正确性和脚本可移植性明确使用的…

eap aka_使用API​​密钥(aka身份验证令牌)部署到Maven Central

eap aka如何在不使用未加密本地密码的情况下与Maven Central / Nexus通信(尤其是使用Gradle,但不仅限于此)。 基本原理 不幸的是,Gradle(和许多其他构建工具)没有提供任何机制来本地加密密码(或…

万维网发布服务 w3svc 已停止 除非万维_万维网和互联网的区别

常见的一个误解是,人们认为互联网(Internet,也叫因特网)和万维网(World Wide Web)是同样的事物。一些词语如“互联网”、“万维网”,“网”和“网络”经常可以交替使用。但是,从技术的角度来说,“互联网”和“万维网”是两个独立的…

C/C++项目开发:通讯录管理系统源码,C语言链表实现

点击蓝字关注我们因公众号更改推送规则,请点“在看”并加“星标”第一时间获取精彩技术分享来源于网络,侵删hello,各位小伙伴们大家好!你们今天有敲代码嘛?如果有熟悉的小伙伴看到我,就知道又可以来学习源码…

javafx窗体程序_JavaFX真实世界应用程序:欧洲电视网广播联盟

javafx窗体程序我荣幸地与今年在德累斯顿Saxonia 系统公司工作的Alexander Casall一起在JavaOne上展示了多个JavaFX Real-World应用程序。 在准备本次演讲时,我们向客户和合作伙伴发送了一份调查表,并向他们询问了一些与他们的项目,他们的应用…

spring 数据库 链接db2_Druid,Java语言中最好的数据库连接池

Druid是Java语言中最好的数据库连接池,这话不是我说的,是Druid官方文档自己这样描述的,这是何等的自信!连接池的作用,跟线程池的作用大同小异,都是为了减少频繁的创建销毁连接IO,提升性能。drui…

编程知识:既然已经有数组了,为什么还要链表?

点击蓝字关注我们因公众号更改推送规则,请点“在看”并加“星标”第一时间获取精彩技术分享来源于网络,侵删对于不少开发者而言,链表(linked list)这种数据结构既熟悉又陌生,熟悉是因为它确实是非常基础的数据结构,陌生…

jcache_随机JCache内容:多个提供程序和JMX Bean

jcacheJCache(JSR 107)是用于缓存的Java标准…足够了。 没有更多介绍性的东西。 这是一则速成文章,内容涉及 多个JCache提供程序配置,以及 功能:通过JMX Mbeans的JCache统计信息 管理多个JCache提供程序 如果您只使…

python webbrowser点击_用 Python 实现手机自动答题,这下百万答题游戏谁也玩不过我!...

引言如果谈到这几年手机上各平台最常见的引流福利,必然是答题赢大奖系列小游戏了。像什么头号英雄,百万玩家之类的,充斥在我们生活中,同时也成为了我们生活中常见的娱乐方式。但是有时候就会想,能不能实现手机自动答题…