Java 9 +拼图上的锡兰

如今,每个人都在谈论模块。 新语言尝试将它们合并,而旧语言则尝试对其进行改型。这是个好消息,因为模块是必不可少的。 Java 9迫在眉睫,因为它应该在明年发布,而真正重要的新功能是模块化,它称为Jigsaw项目

Ceylon是一门从一开始就具有模块化功能的语言,它是该语言的一部分,而不是后来需要复杂的第三方工具集成的想法。 实际上,在设计Java JDK集成时(在Java 7时),我们从一开始就对JDK使用Jigsaw模块化计划(是的,Jigsaw被延迟了几次),这需要JDK用户导入当时计划的Jigsaw模块 ,而不是一次性导入整个JDK。 在某种意义上,也许我们是第一个使用模块化JDK的人:)

Java 9的拼图

拼图是一个非常大的项目,其中包括以下更改:

  • 将JDK模块化为较小的单元,例如JDK的锡兰用户已经熟悉的java.basejava.xml
  • 这种模块化意味着删除包含每个JDK类的rt.jar 。 实际上,它已由不是jar的bootmodules.jimage文件代替,但其内容可以由虚拟NIO FileSystemjrt:/进行访问
  • 您可以编写自己的模块 。 要将Java代码转换为Java 9模块,只需在名为module-info.java的文件中添加模块描述符(类似于Ceylon模块描述符或Java包描述符),该文件描述了模块以及Java 9编译器和jar然后,工具将在jar的根目录中生成一个带有module-info.class描述符的jar。
  • 模块描述符允许您指定模块名称,其导出的软件包,其导入的模块的名称以及其他一些内容。 不幸的是,但不是Java 9中当前“超出范围”的版本。
  • 您可以像以前一样从类路径中运行代码,也可以从模块路径中将其作为模块运行。 模块路径只是一个文件夹,您可以在其中放置模块,JRE会仅根据模块名称为您查找它们。

锡兰和拼图

Java的9有两个早期访问 (EA)的下载用户试用模块系统。 其中只有一个包含用户模块 。 如果要尝试在Java 9上运行的Ceylon,请确保使用该命令。

在过去的几周中,我致力于Ceylon的编译和在Java 9上的运行。这涉及(除其他细节外)以下方面:

  • 从锡兰模块描述符生成module-info.class文件。
  • 为未使用Ceylon编写的Ceylon分发模块生成module-info.class文件(例如编译器或运行时系统)。
  • 利用Java 9模块描述符来获取其中包含的shared软件包信息(从一开始,Ceylon就支持该功能,但是普通Java jar缺少此功能)。
  • 将处理模块的Java 9代码反向移植到javac fork中,我们使用该代码来编译Java文件并生成字节码。
  • 处理rt.jarboot classpath的删除。
  • 创建一个新的ceylon jigsaw工具,该工具可以创建Java 9 模块路径
  • 确保我们可以将Ceylon模块作为Java 9模块运行,以替代四个现有的JVM运行时(JBoss模块,类路径,OSGi或Java EE)。
  • 确保我们可以在Java 7,8,9的任何Java上构建和运行。 这意味着默认情况下,我们不生成Java 9模块描述符,因为目前有几种工具在处理它们时遇到问题。
  • 我们已经从ceylon.language模块中分离出了一些东西,因此它不再依赖于编译器和类型检查器,这意味着更短的最小运行时间,在接下来的几周中,将通过删除更多的依赖项来进一步改进它:)

告诉我如何尝试!

我将为您省去这项工作的许多细节,但是在Java 9团队的帮助下,这是在Java 9运行时上运行Ceylon模块的方式:

  • 使用Jigsaw下载Java 9 EA
  • 获取Ceylon分发代码 ,然后使用ant -Djigsaw=true clean dist进行编译,以获取Java 9模块描述符。
  • 正常编写您的Ceylon模块,但是可以使用.../ceylon/dist/dist/bin/ceylon compile --generate-module-info来生成Java 9模块描述符。
  • 使用.../ceylon/dist/dist/bin/ceylon jigsaw create-mlib my.module/1 mlib .../ceylon/dist/dist/bin/ceylon jigsaw create-mlib my.module/1mlib文件夹中创建Java 9模块路径。
  • 使用.../jdk1.9.0-jigsaw/bin/java -mp mlib -m ceylon.language my.module/1在Java 9上运行您的Ceylon模块。 目前, ceylon.language模块充当主模块,并在加载和调用Ceylon模块之前进行所需的Ceylon运行时设置。

这里的所有都是它的!

注意事项

Java 9尚未完成,我们对Java 9的支持也未完成。 会有问题和错误,实际上我们已经知道一些限制,例如:

  • 虽然您可以从Ceylon导入 Java 9模块,但是我们将尊重其导出的软件包,但是由于Java 9模块不包含依赖版本,因此我们将不遵守其依赖关系。 实际上,甚至模块的版本也不存储在源模块描述符中,而是通过可选标志添加到Java 9 jar工具中。 Ceylon需要模块依赖性来描述版本,因此我们必须将Java 9模块描述符与另一个描述符(例如OSGi描述符或Maven pom.xml描述符)结合起来。 目前尚未完成信息的合并。
  • Java 9当前不支持可选模块或模块周期。 目前尚不清楚他们是否会在此时支持他们。
  • ceylon import-jar工具可能会抱怨模块可见性工件。 我们打算及时修复此问题,但现在您可以使用--force
  • 我们在Ceylon中使用的JDK模块列表在Java 9中稍有变化。这是我们第一个支持Jigsaw的结果;)例如, javax.xml模块已重命名为java.xml 。 我们已经设置了别名,以使其“正常”运行,但是已经合并了模块,并且更改了模块的软件包,因此它并不总是有效。
  • Java 9运行时已经过测试,但没有像现有的JBoss模块,类路径,OSGi或Java EE运行时那样彻底。 我们期望锡兰元模型中出现一些问题。

翻译自: https://www.javacodegeeks.com/2015/12/ceylon-java-9-jigsaw.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值