GWT 中对 Java 8 的支持

50

这似乎是一个非常基本的问题,但我搜索了很多地方,几乎找不到任何相关信息。因此,我在这里提出。

GWT支持Java 8的新语言结构的当前计划是什么?

另外,拟定的Java 8库的哪些子集将用于客户端模拟?Stream API?新的日期/时间API?

最后,与这个重要主题相关的讨论在哪里进行?我相信有很多人想参与并潜在贡献这个努力。

Java 8 beta版本已经存在一段时间了,有很多文章讨论了拟定的API。它应该在今年晚些时候发布,所以现在至少讨论如何和何时才能把期望已久的语言功能引入GWT。

如果这个问题已经在别处回答了,或者我错过了某些重要的相关信息,那我很抱歉。即使已经回答过,这也是一个放置链接到这样的信息的好地方。谢谢!

2个回答

50

编辑 GWT 2.8.0于2016年10月20日发布,支持Java 8语言结构(Lambda表达式、方法引用)和模拟一些Java 8 API(主要是流)。

编辑 截至2014年4月,GWT 2.6支持Java 7,并正在进行工作以支持GWT 2.7中的Java 8,在2014年夏季发布。GWT 2.7可能只支持Java 8语言结构,而不会模拟任何新API(流、javax.time等)。


计划首先支持Java 7:https://github.com/gwtproject/gwt/labels/java7

这涉及更新JDT,并且正在进行开发(或者选择完全不同的东西;JetBrains提出使用已经支持Java 8的解析器,但是GWT还需要编译器,我不知道他们具体提供了什么)。接下来的步骤是将新的语言结构映射到JavaScript(例如字符串在switch中,因为它们可以直接映射到JavaScript,无需Java编译器执行基于hashCode的解糖操作)。

只要GWT在其Java解析/转换/编译中使用JDT,当JDT支持Java 8(在可接受的水平上,目前还不是这种情况)时,才能支持Java 8。


1
JDT。如果您想开始使用它进行操作,可以下载预览版:https://github.com/WeTheInternet/gwt-sandbox/tree/java8 - Thomas Broyer
现在的支持情况如何?我发现如果使用lambda表达式来实现事件处理程序的功能接口,并编译widgetset,则widget不会被正确创建(至少在使用GWT和Vaadin 7.3.10时是如此)。 - tonix
1
Lambdas在'master'中得到支持 https://code.google.com/p/google-web-toolkit/issues/list?can=2&q=label%3Ajava8,将会在GWT 2.8中实现。 - Thomas Broyer
会不会没有java.util.Calendar支持? - Stefan Falk
3
无法实现。 java.time可以在JS基元之上部分实现,但必须有人做出贡献(参见https://github.com/gwtproject/gwt/issues/611和https://github.com/m-m-m/gwt-time)。 - Thomas Broyer
显示剩余3条评论

21

是时候更新答案了。

更新(2020年5月13日)

GWT 2.9.0 终于来了发布说明

  • 支持使用jsinterop-base 1.0.0、elemental2 1.0.0和jsinterop-annotations 2.0.0编译项目。除了@JsAsync和@JsEnum之外,这使得GWT2可以与J2CL的这些工具兼容。
  • 增加了对Java语言级别9、10和11的支持。
  • 正式停止在Java 7上运行GWT编译器或服务器端工具的支持。该GWT发行版仍然编译为在此版本中运行的Java 7,但不能保证是否能正常工作。未来版本将编译字节码为Java 8+。该版本已经过测试,在Java 8、11和14上运行时跨平台工作。

更新(2017年10月)

GWT 2.8.2 在这里可用发布说明

更新(2017年6月)

官方的GWT 2.8.1 下载

2.8.1版本发布说明

更新(2016年10月)

GWT 2.8.0终于来了!

GWT团队已在Github上发布了2.8.0版本。官方GWT网站尚未更新,但有一个用于更新GWT网站的拉取请求已经准备就绪并在审核过程中。所以很快编译版本将会可供下载!

现在可以下载了

更新(2016年9月)

与此同时,GWT团队在GitHub镜像上标记了GWT 2.8.0 RC3

GWT团队(Daniel Kurka)已经在这里发布了GWT 2.8.0(RC2)版本。

2.8.0(RC2)的发行说明如下:

错误修复

  • 修复了不正确的无法通过JS警告。
  • 修复了DevMode服务器(jetty)重新启动的问题。
  • 修复了在超级Dev模式下更改编译器选项不会触发完整重新编译的问题。
  • 添加了缺少的DevMode入口命令行参数
  • 修复了String中的性能回归问题。

RC1的发行说明可在官方网站上查看。以下是关于即将推出的GWT 2.8.0版本中Java 8支持的最重要的更改:

亮点

  • 部分支持Java 8标准库API(完整列表见下文)。
  • 修复了Java 8编译时的内存泄漏问题。
  • 将源代码级别设置为Java 8。
  • 接口中的静态和默认方法对生成器不可见。如果您想利用这些Java-8特性,建议切换到注解处理器。如果将一个非默认方法更改为默认方法,可能会破坏现有的构建。

JDK 8模拟支持

  • 模拟java.io.UncheckedIOException。
  • 模拟Optional及其int、long、double变体。
  • 使用消息供应商模拟Objects.requireNonNull()。
  • 修复Math.min/max(float/double)模拟行为。
  • 模拟Character.isBmpCodePoint()。
  • 模拟CharSequence.chars()。
  • 模拟java.lang.SecurityException。
  • 模拟Java 8 API
    • java.util.Arrays,
    • java.util.ArrayDeque,
    • java.math.BigInteger,
    • java.util.BitSet,
    • java.util.Comparator,
    • java.util.function,
    • java.util.Iterator,
    • java.lang.Iterable,
    • java.util.IntSummaryStatistics/LongSummaryStatistics/DoubleSummaryStatistics
    • java.util.Collection/Lists/Queues,
    • java.util.Map,
    • java.util.logging.Logger,
    • java.util.PrimitiveIterator,
    • java.util.Spliterator,
    • java.util.stream,
    • java.util.StringJoiner

GWT 2.8.0 RC2仍存在一些问题,GWT团队预计很快会解决。最终版本将很快发布(“尽快发布”)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接