如何在单个API中支持Java 6、8、9
借助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相关推荐
- java8返回单个号码_如何在单个API中支持Java 6、8、9
java8返回单个号码 借助jOOQ 3.7,我们终于添加了对Java 8功能的正式支持. 这为许多不错的改进打开了大门,例如: 创建结果流 try (Stream<Record2<Str ...
- 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版本 ...
- JBoss AS 8中的Java EE 7和EJB 3.2支持
你们中有些人可能已经知道Java EE 7规范的Public Final Draft版本已经发布 . 除此以外,此版本的Java EE还引入了EJB规范的EJB 3.2版本. 与EJB 3.1规范相比 ...
- java script 添加控件,【更新】GLG工具包Visualization and HMI Toolkit更新至v3.6,支持Java Script...
Visualization and HMI Toolkit的为开发高级图形的动态界面而设计的艺术化的框架:它不仅仅是简单的按键与菜单,它是全动态的能显示动态数据以及能反映用户互动的图片对象.它不仅仅是 ...
- android api 设置,Android API中文文档EditText
Android API中文文档EditText是本文要介绍的内容,主要是来了解并学习Android API文档的帮助,具体关于Android API的内容的详解来看本文. 一.Android API中 ...
- visual studio 运行java_Visual Studio 支持 Java?谣言止于智者
在去年的某一段时间内,我们经常会看到标题类似为"宇宙第一 IDE Visual Studio 支持 Java 了!"的文章.当时,韩老师看到这篇文章也是一脸懵逼.公司里做 Java ...
- 微软宣布Azure Functions正式支持Java
微软宣布Azure Functions V2.0支持Java.开发人员现在可以用Java 8编写Function,并利用Visual Studio Code.IntelliJ.Eclipse和跨平台F ...
- 用leda没有java enterprise选项_Visual Studio 支持 Java?谣言止于智者
在去年的某一段时间内,我们经常会看到标题类似为"宇宙第一 IDE Visual Studio 支持 Java 了!"的文章.当时,韩老师看到这篇文章也是一脸懵逼.公司里做 Java ...
- Visual Studio 支持 Java?谣言止于智者
在去年的某一段时间内,我们经常会看到标题类似为"宇宙第一 IDE Visual Studio 支持 Java 了!"的文章.当时,韩老师看到这篇文章也是一脸懵逼.公司里做 Java ...
最新文章
- poj1905(二分查找)
- Amcharts 柱状图和线形图
- 关于GitHub下载巨慢问题的解决方案
- python list remove 删除引用_Python——list列表操作一坑(remove)
- 仓库对象DataSet与小车对象DataAdapter的 关键命令 1201
- The .NET Core runtime can be found at:(Windows)
- 在Windows下安装和配置Node.js环境v8.11.3与遇到的问题
- centos7系统搭建DNS服务器
- mysql prefix_批量修改MySQL表前缀
- nbu备份oracle中途停止,NBU异构还原Oracle完整备份的一些总结
- 资源 | 最新版区块链术语表(中英文对照)
- 【论文学习】10、物联网安全WiFi设备的监控与识别
- 基于STM32F103的多种波形示波器制作
- slidebox使用教程 设定焦点数量
- 如何提取PDF页面?3种拆分PDF的方法
- 2019年电子设计国赛综合测评回顾
- 用php的定界符EOT需要注意的地方
- android手机屏幕总是闪烁,手机屏幕闪烁是什么原因
- Mobileye超详细研报:高逼格ADAS的内在修养
- 正斜杠 “/” 与反斜杠 “\”辨析
热门文章
- Shell入门(一)之简介
- laravel使用migrate操作数据库迁移
- 家的味道,家的感觉!!!
- Java实现最电话号码的简单加密源码
- struts+hibernate+oracle+easyui实现lazyout组件的简单案例——Emp实体类和对应的配置信息
- JavaScript对象与事件
- 2018蓝桥杯省赛---java---A---9(倍数问题)
- d3 i5 神舟精盾k480n_神舟精盾k480n i5 d3和精盾i5 d1哪个好?
- 可以搜python编程答案的软件_python实现百万答题自动百度搜索答案
- JavaWeb项目:简易小米商城系统