问题标签 [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.
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 版本。
java-14 - 在从 azul/zulu-openjdk-debian:14 获取的图像中找不到“jhsdb”命令
我使用映像 azul/zulu-openjdk-debian:14 通过 Docker 将应用程序升级到 Java 14。但是,我无法获取堆统计信息,因为容器没有安装 jhsdb (jmap)。想知道要安装哪个包才能获取堆统计信息、运行 GC 和进行线程转储。
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 机器上的性能,这是否是一种有意的权衡?
gradle - 如何使用 Gradle 打包 javafx 应用程序?
我有使用 gradle 构建的 javafx 应用程序,我正在使用外部库 apache poixml,需要为它创建 jar,当我在 github 上尝试使用 poixml 类示例项目时,它无法运行:https ://github.com/ IslamAssem/HelloFX-Gradle
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
用最新版本,有错误
java - 如何在 Spring 框架和 Jackson 中使用 Java 14 记录
我有以下简单的测试
这适用于具有 getter 和 setter 的 TimezonePage 类。
pom.xml 的相关部分如下
我创建了一个 Java 14 记录 TimezoneRecord,其变量与 TimezonePage 相同,但没有 getter 和 setter。然后我用
没有语法错误。运行测试时,我收到以下异常
有什么办法可以解决吗?或者我不能将杰克逊与记录一起用作 POJO?谢谢,弗拉基米尔
java - 如何在java文本块中为变量值设置占位符
如何将变量放入 java 文本块?
喜欢
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 的错误报告。
java - 使用 java14 中的 javac 为 java7 生成代码
我有一个类,它使用sun.rmi
API(原因请阅读下文)。我想使用 java 14 来编译我的项目,但它也应该在 java 7 上运行。所以我尝试使用javac -release 7
flag 跨版本交叉编译。唉,编译失败
现在有什么方法可以让编译器这样做吗?:)
我开发了一个 java 代理,它应该通过字节码生成来检测 RMI 传输,以便在每个 RMI 调用中传递一些数据。所以请不要告诉我“你真的不应该依赖内部 API”。
java - jlink:ed 应用程序中的记录引发异常
在 jlink:ed 应用程序中使用记录(预览功能 java-14),使用选项时会出现以下错误: