借助jOOQ 3.7,我们终于添加了对Java 8功能的正式支持。 这为许多不错的改进打开了大门,例如:

创建结果流

try (Stream<Record2<String, String>> stream =DSL.using(configuration).select(FIRST_NAME, LAST_NAME).from(PERSON).stream()) {List<String> people =stream.map(p -> p.value1() + " " + p.value2()).collect(Collectors.toList());
}

异步调用语句(jOOQ 3.8+)

CompletionStage<Record> result =
DSL.using(configuration).select(...).from(COMPLEX_TABLE).fetchAsync();result.thenComposing(r -> ...);

但是显然,我们不想让那些因使用较旧的应用程序服务器而受Java 6困扰的付费客户感到失望。

如何在单个API中支持多个Java版本

这就是为什么我们继续为商业客户发布Java 6版本的jOOQ 。 我们是怎么做的? 非常简单地。 我们的商业代码库(这是我们的主要代码库)包含大量的“标志”,如以下示例所示:

public interface Query
extends QueryPart, Attachable /* [java-8] */, AutoCloseable /* [/java-8] */
{int execute() throws DataAccessException;/* [java-8] */CompletionStage<Integer> executeAsync();CompletionStage<Integer> executeAsync(Executor executor);/* [/java-8] */}

(当然, AutoCloseable在Java 7中已经可用,但是我们没有Java 7版本)。

构建jOOQ时,在使用预处理器从源文件中剥离逻辑之后,我们对其进行了多次构建:

  • 商业Java 8版本是按原样构建的
  • 通过剥离[java-8][/java-8]标记之间的所有代码,构建第二个商业Java 6版本
  • 通过向商业版本添加一些代码来构建商业免费试用版。
  • 通过剥离[pro][/pro]标记之间的所有代码,构建了第三个开源版本

这种方法的优点

与其他方法相比,此方法有几个优点:

  • 我们只有一个真理来源,即原始的商业源代码。
  • 所有不同版本中的行号均相同
  • 这些API在一定程度上是兼容的
  • 通过类加载或反射不会涉及任何魔术

缺点是:

  • 提交到存储库要慢一些,因为我们有几个存储库。
  • 发布版本需要更长的时间,因为需要构建不同的版本并多次测试集成
  • 有时,我们只是忘了添加一个标记,而当每晚Java-6构建崩溃时,我们不得不重新构建
  • 我们仍然无法在Java 6版本中包含的普通代码中使用lambda表达式(大多数代码)

我们认为,优势明显胜过。 只要我们的客户能够,并且只要那些仍旧使用旧版本的客户仍然能够升级到最新的jOOQ版本,就可以实现一流的Java功能就可以了。

我们期待在不影响现有用户的情况下支持JDK 9功能,例如模块化和新的Flow API 。

你呢?

您如何实现跨JDK版本的兼容性?

翻译自: https://www.javacodegeeks.com/2016/03/support-java-6-8-9-single-api.html

如何在单个API中支持Java 6、8、9相关推荐

  1. java8返回单个号码_如何在单个API中支持Java 6、8、9

    java8返回单个号码 借助jOOQ 3.7,我们终于添加了对Java 8功能的正式支持. 这为许多不错的改进打开了大门,例如: 创建结果流 try (Stream<Record2<Str ...

  2. ejb 2.1 jboss_JBoss AS 8中的Java EE 7和EJB 3.2支持

    ejb 2.1 jboss 你们中有些人可能已经知道Java EE 7规范的Public Final Draft版本已经发布 . 除此以外,此版本的Java EE还引入了EJB规范的EJB 3.2版本 ...

  3. JBoss AS 8中的Java EE 7和EJB 3.2支持

    你们中有些人可能已经知道Java EE 7规范的Public Final Draft版本已经发布 . 除此以外,此版本的Java EE还引入了EJB规范的EJB 3.2版本. 与EJB 3.1规范相比 ...

  4. java script 添加控件,【更新】GLG工具包Visualization and HMI Toolkit更新至v3.6,支持Java Script...

    Visualization and HMI Toolkit的为开发高级图形的动态界面而设计的艺术化的框架:它不仅仅是简单的按键与菜单,它是全动态的能显示动态数据以及能反映用户互动的图片对象.它不仅仅是 ...

  5. android api 设置,Android API中文文档EditText

    Android API中文文档EditText是本文要介绍的内容,主要是来了解并学习Android API文档的帮助,具体关于Android API的内容的详解来看本文. 一.Android API中 ...

  6. visual studio 运行java_Visual Studio 支持 Java?谣言止于智者

    在去年的某一段时间内,我们经常会看到标题类似为"宇宙第一 IDE Visual Studio 支持 Java 了!"的文章.当时,韩老师看到这篇文章也是一脸懵逼.公司里做 Java ...

  7. 微软宣布Azure Functions正式支持Java

    微软宣布Azure Functions V2.0支持Java.开发人员现在可以用Java 8编写Function,并利用Visual Studio Code.IntelliJ.Eclipse和跨平台F ...

  8. 用leda没有java enterprise选项_Visual Studio 支持 Java?谣言止于智者

    在去年的某一段时间内,我们经常会看到标题类似为"宇宙第一 IDE Visual Studio 支持 Java 了!"的文章.当时,韩老师看到这篇文章也是一脸懵逼.公司里做 Java ...

  9. Visual Studio 支持 Java?谣言止于智者

    在去年的某一段时间内,我们经常会看到标题类似为"宇宙第一 IDE Visual Studio 支持 Java 了!"的文章.当时,韩老师看到这篇文章也是一脸懵逼.公司里做 Java ...

最新文章

  1. poj1905(二分查找)
  2. Amcharts 柱状图和线形图
  3. 关于GitHub下载巨慢问题的解决方案
  4. python list remove 删除引用_Python——list列表操作一坑(remove)
  5. 仓库对象DataSet与小车对象DataAdapter的 关键命令 1201
  6. The .NET Core runtime can be found at:(Windows)
  7. 在Windows下安装和配置Node.js环境v8.11.3与遇到的问题
  8. centos7系统搭建DNS服务器
  9. mysql prefix_批量修改MySQL表前缀
  10. nbu备份oracle中途停止,NBU异构还原Oracle完整备份的一些总结
  11. 资源 | 最新版区块链术语表(中英文对照)
  12. 【论文学习】10、物联网安全WiFi设备的监控与识别
  13. 基于STM32F103的多种波形示波器制作
  14. slidebox使用教程 设定焦点数量
  15. 如何提取PDF页面?3种拆分PDF的方法
  16. 2019年电子设计国赛综合测评回顾
  17. 用php的定界符EOT需要注意的地方
  18. android手机屏幕总是闪烁,手机屏幕闪烁是什么原因
  19. Mobileye超详细研报:高逼格ADAS的内在修养
  20. 正斜杠 “/” 与反斜杠 “\”辨析

热门文章

  1. Shell入门(一)之简介
  2. laravel使用migrate操作数据库迁移
  3. 家的味道,家的感觉!!!
  4. Java实现最电话号码的简单加密源码
  5. struts+hibernate+oracle+easyui实现lazyout组件的简单案例——Emp实体类和对应的配置信息
  6. JavaScript对象与事件
  7. 2018蓝桥杯省赛---java---A---9(倍数问题)
  8. d3 i5 神舟精盾k480n_神舟精盾k480n i5 d3和精盾i5 d1哪个好?
  9. 可以搜python编程答案的软件_python实现百万答题自动百度搜索答案
  10. JavaWeb项目:简易小米商城系统