问题标签 [java-14]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
320 浏览

java - 无法通过 ToolProvider 找到 jpackage

精简版:我正在尝试从 gradle 任务中调用 jpackage,但 ToolProvider 返回 null(或者更好的是失败的 Optional)。AdoptOpenJDK 14.0.0(sdkman 标识符 14.0.0.hs-adpt)和 Java.net(我认为那是 Oracle OpenJDK!?)14.0.1(sdkman 标识符 14.0.1-open)就是这种情况。我正在使用 Gradle 6.3(但这感觉不像是 gradle 问题)。

长版:我正在关注jpackage 上的这个演讲,在 12:12 显示了从构建工具调用 jpackage 的代码。(官方jpackage页面还提到:除了命令行界面,jpackage可以通过名为“jpackage”的ToolProvider API(java.util.spi.ToolProvider)访问。

仍然是我的(Kotlin)代码(位于 buildSrc/src/main/kotlin 中)

由新的 Gradle 任务调用

未能说明

我应该补充一点,从命令行调用 jpackage 没有问题。

更新:我证实这与 Kotlin 或 Gradle 无关。这个基本的 Java-14 程序产生了同样的异常:

解决方案:(结合 Slaw 的回答)由于 jpackage 处于“孵化”状态,因此对于我的非模块化应用程序来说不容易使用,我决定通过创建一个新进程来调用它:

我的任务定义如下所示:

我无法从 IntelliJ 中执行任务,因为它似乎使用它本身捆绑的 JDK11 调用 Gradle,但至少 IntelliJ 可以自己编译构建脚本(因为版本检查在 doLast 块中,而不是直接在寄存器块)。或者,您可以更改 IntelliJ 用来调用 Gradle 的 JDK,向下滚动到 Slaw 在他的答案下的评论,看看如何。

顺便说一句:我很确定Gradle 版本 6.3是这个工作的硬性要求,因为它是第一个与 Java 14 兼容的 Gradle 版本。

0 投票
1 回答
170 浏览

java-14 - 在从 azul/zulu-openjdk-debian:14 获取的图像中找不到“jhsdb”命令

我使用映像 azul/zulu-openjdk-debian:14 通过 Docker 将应用程序升级到 Java 14。但是,我无法获取堆统计信息,因为容器没有安装 jhsdb (jmap)。想知道要安装哪个包才能获取堆统计信息、运行 GC 和进行线程转储。

0 投票
5 回答
2243 浏览

java - 缓慢的应用程序,频繁的 JVM 挂起,单 CPU 设置和 Java 12+

我们有一个客户端应用程序(经过 10 多年的开发)。它的 JDK 最近从 OpenJDK 11 升级到了 OpenJDK 14。在单 CPU(禁用超线程)Windows 10 设置(以及只有一个可用 CPU 的 VirtualBox 机器内)上,与 Java 11 相比,应用程序启动得非常慢。此外,它大部分时间都使用 100% 的 CPU。c:\windows\system32\cmd.exe /C start /affinity 1 ...我们还可以通过将处理器亲和性设置为仅一个 CPU ( )来重现该问题。

在我的 VirtualBox 机器中启动应用程序并以最少的手动交互进行查询的一些测量:

  • OpenJDK 11.0.2:36 秒
  • OpenJDK 13.0.2:~1.5 分钟
  • OpenJDK 13.0.2 -XX:-UseBiasedLocking:46 秒
  • OpenJDK 13.0.2 -XX:-ThreadLocalHandshakes:40 秒
  • OpenJDK 14:5-6 分钟
  • OpenJDK 14 -XX:-UseBiasedLocking:3-3,5 分钟
  • OpenJDK 15 EA Build 20:~4.5 分钟

只有使用的 JDK(和提到的选项)已更改。(-XX:-ThreadLocalHandshakes在 Java 14 中不可用。)

我们已经尝试记录 JDK 14 对-Xlog:all=debug:file=app.txt:uptime,tid,level,tags:filecount=50.

使用 OpenJDK 11.0.2 计算每秒的日志行数似乎非常顺利:

另一方面,OpenJDK 14 似乎有一些有趣的安静期:

那么,在 1-4、7-10 和 14-20 秒之间发生了什么?

第二次停顿一会儿:

然后是第三个:

以下两行似乎很有趣:

这些握手需要 5.5 和 6.8 秒是正常的吗?

使用以下命令运行update4j 演示应用程序(与我们的应用程序完全无关)时,我遇到了同样的减速(和类似的日志) :

为了让我们的应用在单 CPU Windows 10 设置上再次变得更快,我应该寻找什么?我可以通过更改应用程序中的某些内容或添加 JVM 参数来解决此问题吗?

这是一个 JDK 错误,我应该报告它吗?

2020-04-25 更新:

据我所知,日志文件还包含 GC 日志。这些是第一个 GC 日志:

不幸的是,它似乎不相关,因为它在第三次暂停之后开始。

2020-04-26 更新:

使用 OpenJDK 14,应用程序在我的(单 CPU)VirtualBox 机器(在 i7-6600U CPU 上运行)中使用 100% CPU。虚拟机有 3.5 GB RAM。根据任务管理器 40%+ 是免费的,磁盘活动是 0%(我想这意味着没有交换)。向虚拟机添加另一个 CPU(并为物理机启用超线程)使应用程序再次变得足够快。我只是想知道,在 JDK 开发过程中,为了让 JVM 在多核/超线程 CPU 上更快地降低(稀有)单 CPU 机器上的性能,这是否是一种有意的权衡?

0 投票
1 回答
1734 浏览

gradle - 如何使用 Gradle 打包 javafx 应用程序?

我有使用 gradle 构建的 javafx 应用程序,我正在使用外部库 apache poixml,需要为它创建 jar,当我在 github 上尝试使用 poixml 类示例项目时,它无法运行:https ://github.com/ IslamAssem/HelloFX-Gradle

0 投票
1 回答
2712 浏览

java - PMD 插件因 Java 14 失败:不支持的 targetJdk

我正在尝试将带有 PMD 插件的 pom.xml 文件集成到构建阶段。

PMD 版本3.13.0

甲骨文 JDK 14

mvn clean install 失败了

我试过的

https://stackoverflow.com/a/2033299/1839360 添加了对 pmd-java 的依赖项 - 它不起作用。我尝试了两个版本 https://mvnrepository.com/artifact/net.sourceforge.pmd/pmd-java/6.21.0 https://mvnrepository.com/artifact/net.sourceforge.pmd/pmd-java/6.23.0

用最新版本,有错误

0 投票
1 回答
682 浏览

java - 如何在 Spring 框架和 Jackson 中使用 Java 14 记录

我有以下简单的测试

这适用于具有 getter 和 setter 的 TimezonePage 类。
pom.xml 的相关部分如下

我创建了一个 Java 14 记录 TimezoneRecord,其变量与 TimezonePage 相同,但没有 getter 和 setter。然后我用

没有语法错误。运行测试时,我收到以下异常

有什么办法可以解决吗?或者我不能将杰克逊与记录一起用作 POJO?谢谢,弗拉基米尔

0 投票
1 回答
3796 浏览

java - 如何在java文本块中为变量值设置占位符

如何将变量放入 java 文本块?
喜欢

0 投票
2 回答
1575 浏览

java - 如何记录 Java Record 参数?

应该如何记录Java Record参数?我指的是最终成为构造函数参数的参数,类字段。

我试过了:

但 IntelliJ IDEA@param将 s 标记为错误。我找不到一个关于这应该如何工作的在线示例。我发现的最接近的讨论是https://bugs.openjdk.java.net/browse/JDK-8225055

我在 JDK 中发现了一些单元 测试,似乎暗示这应该可以工作。也许这是一个IDE错误?

我正在使用 OpenJDK 14+36-1461,IDEA 2020.1。

为了以防万一,我提交了一份针对 IDEA 的错误报告。

0 投票
0 回答
131 浏览

java - 使用 java14 中的 javac 为 java7 生成代码

我有一个类,它使用sun.rmiAPI(原因请阅读下文)。我想使用 java 14 来编译我的项目,但它也应该在 java 7 上运行。所以我尝试使用javac -release 7flag 跨版本交叉编译。唉,编译失败

现在有什么方法可以让编译器这样做吗?:)

我开发了一个 java 代理,它应该通过字节码生成来检测 RMI 传输,以便在每个 RMI 调用中传递一些数据。所以请不要告诉我“你真的不应该依赖内部 API”。

0 投票
4 回答
194 浏览

java - jlink:ed 应用程序中的记录引发异常

在 jlink:ed 应用程序中使用记录(预览功能 java-14),使用选项时会出现以下错误: