- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
最近,一位队友在我们的 Java 8 代码中使用了以下函数:Matcher.replaceAll(Function replacer) 。该函数是在 Java 9 中引入的,但由于他使用的是较新的编译器,API 函数只是在 JDK 的 rt.jar 中找到,没有人注意到这在真正的 Java 8 环境下不起作用。兼容性设置正确,gradle子项目有如下设置:
sourceCompatibility = 1.8
targetCompatibility = 1.8
当我第一次在 Java 5 代码中使用 Java 6 函数 String.isEmpty
时,我遇到了非常类似的问题 - 该代码进入了发行版并在那里崩溃了。
我可以做什么来强制使用正确的 API。由于它是一个共享库,我是否必须为这个 gradle 子项目使用(并安装、维护..)不同的 JDK,或者是否有某种兼容性扫描仪可以通过构建的 jar 运行并检查所有 rt 引用? p>
最佳答案
正如您所注意到的,这两种兼容性配置不考虑旧版本的 API - 仅考虑语法、语义和生成的字节代码。
您可以采取两种选择。一种是在计算机上安装 JDK 8,并配置 Gradle 以在编译项目时使用它。它看起来像这样:
tasks.withType(JavaCompile) {
options.fork = true
options.forkOptions.executable = "$java8Home/bin/javac"
options.bootstrapClasspath = files("$java8Home/jre/lib/rt.jar")
}
这里的缺点是您需要首先安装 JDK 8,并且由于它可能会安装在不同的位置,因此您可能需要使用环境变量或属性来配置它(我已经此处将其称为 java8Home
)。
但是,从 Java 9 开始,JDK 现在了解以前版本的已记录 API,并且您可以通过新的 --release
标志选择要使用的 API。如果您使用未记录的 API,这将不起作用,但这意味着您可以使用任何版本的 Java 编译您的项目,并且仍然使生成的类与 Java 8 兼容。您可以这样做:
tasks.withType(JavaCompile) {
if (JavaVersion.current() > JavaVersion.VERSION_1_8) {
options.compilerArgs.addAll(['--release', '8'])
}
}
请注意,“if”语句仅在您仍然需要支持使用 Java 8 运行 Gradle(通过您的 JAVA_HOME
变量)时才存在。如果您只使用更高版本,则可以将其删除,以便您始终设置“compilerArgs”。
关于java - 验证使用较新的 JDK 构建的库的 API 级别的向后兼容性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58165833/
我想在 iOS 设备上以慢动作显示视频。 我的 View 包含一个视频(约 2 秒长)和一个 slider 。 用户可以移动 slider 并逐帧(向前和向后)浏览电影。 MPMoviePlayerC
假设两个模型的标准外键,例如: Company(models.Model): name = models.CharField('Nome', max_length = 255) ...
即使从其他项目复制和粘贴代码,我的 NSURL 也会向后格式化,这毫无意义。 例如: let baseURL = NSURL(string: "http://example.com/v1/") NSU
我目前有: $i = 1; while { echo $i; $i++; } 它显示: 1234 etc.. 如何让它向后显示? 例如 4321 etc.. 我基本上想做完全相同的事情,但将其
我正在使用 JQuery 选择页面上的一些元素,然后在 DOM 中移动它们。我遇到的问题是我需要以 JQuery 自然想要选择它们的相反顺序选择所有元素。例如: Item 1 Item
有 Home.vue 和 Statistics.vue 页面。 Home.vue 渲染 TableFields.vue 组件。在 Home.vue 中,有一些字段编号,在页面加载时设置了初始值“3”。
我正在寻找类似 https 的东西,但是是反向的。用户(提前)生成自己的私钥,然后(仅在稍后)向 Web 应用程序提供关联的公钥。这部分交换应该(如果需要)在带外进行。然后使用这些 key 对通信进行
我不知道如何解释我的问题。这是我尝试解释的:函数 FindNext(SearchRec) 将从目录中获取下一个文件。在我的应用程序中,我有时会从当前的 SearchRec 索引向后查找一些文件。那么我
我有一个带前导 NA 的日期向量,我想使用包 zoo 中的 na.approx 为这些 NA 生成一个近似序列。 na.approx 不适用于前导 NA: x <- as.Date(c(rep(NA,
在任何网络浏览器、Windows 文件管理器和许多其他应用程序中,都支持向前和向后导航。默认情况下,这始终(或至少在大多数情况下)适用于额外的鼠标按钮,如果您的鼠标有的话。 我想在基于 WinAPI
我正在尝试使用双向链表编写撤消和重做函数,该双向链表在调用 doAction() 时在 list_1 前面添加操作(节点),在调用 undo() 时将操作存储在 list_2 中,并在调用 redo(
我有一个示例数据框,如下所示 ID count 1 10 2 20 3 40 所以对于累计计数,我要实现 ID count
我的应用程序需要显示一个值的图形表示,范围从 -1 到 1。负值应使用一种颜色,正值应使用另一种颜色。零位于中心,什么也没有显示。 (如果有帮助的话,这里的特殊用途是在金融应用程序中显示买卖订单的相对
我对这个简单的线条动画有点吃力。我想出了如何暂停它,但我需要的是能够从我调用函数 resetAnimation() 的那一刻起将动画反转回起点。 let pathAnimation = CABasic
这个问题在这里已经有了答案: 关闭 11 年前。 Possible Duplicate: How to read a file from bottom to top in Ruby? 在开发我的 R
import numpy as np data = np.array([0, 0, 0, 0, 0, 0, 0, 1], dtype=np.uint8) data.view(np.uint64) 我期
我有一个这样的值列表, lst = [1, 2, 3, 4, 5, 6, 7, 8] 期望输出 : window size = 3 1 # first element in the list
我的代码再简单不过了... if (iWant > thereAre){ msg = "There's only "+thereAre+" left, but you want "+iWant
#include #include /* converts to binary */ int main() { unsigned int decimalNUM = 0; print
CTRL-x o - switch cursor to other window 我想有能力扭转 control-x o做。像 control-x p这正是 control-x o有,但倒退。这个请求
我是一名优秀的程序员,十分优秀!