问题标签 [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 回答
131 浏览

java - 此代码段是否正在编译?我不这么认为 Java 14 记录

周末我在阅读一些关于 Java 14 预览特性的记录。我不想问这个问题,因为它似乎是 Brian Goetz 的代码,我们都知道这个人是谁,代表 Java 生态系统,但这一直在我的脑海里,我知道它会学习为了我。

链接在这里。https://www.infoq.com/articles/java-14-feature-spotlight/?utm_campaign=infoq_content&utm_source=infoq&utm_medium=feed&utm_term=Java

是这样的。

我假设这条线返回一个分数参考。

也许在我理解它试图做什么之前你已经看到了它,但有些东西我不明白。也许我错了。

这条线

的APIcomparingInt是这样的。

但只要我理解方法参考

从 Records 元组返回 Score 引用对吗?不是整数或导致整数

或者这会使代码编译我认为可能是一个打字错误。

正如我之前所说,根据我的理解,这段代码不会编译;也许我错了。

0 投票
1 回答
14153 浏览

java - 使用 Oracle JDK 14 时,所有 gradle (6.2.2) 任务都失败并显示“无法初始化类 org.codehaus.groovy.runtime.InvokerHelper”

我安装了 JDK 14 并开始使用它。

但是,使用 Gradle 6.2.2 的项目无法运行,并且每次我尝试调用 Gradle Task 时都会出现以下错误:

无法初始化类 org.codehaus.groovy.runtime.InvokerHelper

其他项目,例如 Maven 项目和纯 Java 项目,可以在 Java 14 上正常工作。

重现此错误的一种简单方法是创建一个新文件夹并尝试运行该init任务。

例如:

gradle init --type basic

FAILURE:构建失败并出现异常。

  • 出了什么问题:无法初始化类 org.codehaus.groovy.runtime.InvokerHelper

  • 尝试:使用 --stacktrace 选项运行以获取堆栈跟踪。使用 --info 或 --debug 选项运行以获得更多日志输出。运行 --scan 以获得完整的见解。

  • 在https://help.gradle.org获得更多帮助

在 878 毫秒内构建失败

运行此示例的 PC 使用的是 windows 10。java 版本为:

java --版本

java 14 2020-03-17 Java(TM) SE 运行时环境 (build 14+36-1461)

Java HotSpot(TM) 64 位服务器 VM(内部版本 14+36-1461,混合模式,共享)

有什么解决方案可以让 Gradle 6.2.2 与 Oracle JDK 14 一起工作吗?

0 投票
1 回答
182 浏览

java - JPackage 仅返回 Java 14 上的 SDK 版本号

我最近将我们的 Java 11 应用程序移植到了新发布的 Java 14 (ZuluJDK)。当尝试通过命令行使用新的 JPackage 打包我们的应用程序时,无论我使用哪个 jpackage-command,唯一发生的事情是以下输出:

一个示例命令(审查了一些东西,由 < > 占位符表示......):

有人可以帮助我是什么原因造成的吗?sdk 版本的输出并没有提供太多帮助。

0 投票
1 回答
177 浏览

java - Java 符号不再出现在系统首选项中,但仍然安装

我必须处理一个关于在我的 mac 上安装 Java 的令人困惑的问题:

  • 如果我转到系统首选项,则不再有 Java 符号: 在此处输入图像描述

  • 但是如果我java -version在终端输入,我会得到

    java version "14" 2020-03-17 Java(TM) SE Runtime Environment (build 14+36-1461) Java HotSpot(TM) 64-Bit Server VM (build 14+36-1461, mixed mode, sharing)

因此,似乎仍然安装了 Java。

我的系统:macOS High Sierra 版本 10.13.6

0 投票
3 回答
3122 浏览

java - Netbeans 11.3 和 Java 14 预览功能

我使用 Java 14 作为 Netbeans 11.3 的默认 Java 平台(netbeans_jdkhome 设置为我的 Java 14 JDK)并尝试在简单的 Java 应用程序中使用预览功能。我将源级别设置为 14 并将 --enable-preview 设置为编译器参数。代码编译没有错误。

但是,当我尝试在 Netbeans 中运行它时,它抱怨 .class 文件的主要版本是 57,而运行时只能很好地处理 58 个文件和预览功能。这是错误:

java.lang.UnsupportedClassVersionError:javaapplicationtest14/JavaApplicationTest14(类文件版本 57.65535)使用不受支持的预览功能编译。此版本的 Java 运行时仅识别类文件版本 58.65535 的预览功能

我检查了 .class 文件的主要版本,它们确实是 57。任何想法为什么我的项目不会编译成 Java 14 级别?我正在使用 Ant 构建。

0 投票
1 回答
1156 浏览

java - Java 记录和 Lombok 注释 - IntelliJ

只是尝试动手操作java.lang.Record。我已经阅读了文档和JEP-359以获得一些理解。因此,在阅读了构造函数的隐式声明后,我想到了将它与现有的代码生成库 - Lombok 混合起来!

现在我最终创建的一个最小的可重现示例就是这条记录

当使用 IntelliJ 编译成功生成类文件时,它看起来像

请注意,.class文件的构造函数也正是我在这两个世界中独立所期望的。但是,在 IntelliJ 编译期间进一步尝试创建此记录的实例失败:

我将创建一个更简单的示例来javac使用工具执行编译和执行java。如果这是由于我可能忽略的某些事情而可能发生的预期行为,我仍在寻找答案?

这就是它在 IntelliJ 中反映的两种情况 - 有和没有@AllArgsConstructor.

截屏

0 投票
1 回答
368 浏览

java - 将类转换为记录时的兼容性问题

我一直在使用以下名为City

并试图将其转换为被record称为CityRecord

但是转向这样的表示,我们的一个单元测试开始失败。测试在内部处理从 JSON 文件读取的城市列表,并映射到进一步计算城市的对象,同时将它们分组到Map. 简化为:

上面的代码断言 true 包含 4 个键,每个键占其出现的 1 个。使用记录表示,结果中的键不超过 3 个Map。是什么导致了这种情况,应该采取什么方法来解决这个问题?

0 投票
1 回答
694 浏览

java - JPackage 在创建 DMG 之前将文件复制到 app 的 Resource 文件夹

我在 MacOS 上使用 Java 14 的 JPackage,需要在构建 DMG 之前将文件复制到应用程序的 MacOS 和 Resources 文件夹,但不知道如何操作。在打包工具用户指南中,它提到从名为 application-name-post-image.sh 的资源文件夹运行脚本,但这似乎没有发生。

0 投票
1 回答
4127 浏览

java - JPMS:--add-opens 不适用于 java.lang.reflect.InaccessibleObjectException

我将 Java 14 与 Jetty 9.4 和 Weld-servlet-shaded-3.1 一起使用,我得到了这个异常:

根据这里的回答:https ://stackoverflow.com/a/41265267/5057736我试图添加

但是没有人帮忙。有人能说如何解决吗?

编辑 1
我发现这个问题出现在 Java 12、13、14 OpenJDK/Oracle 中。但是,如果我使用 Java 11 OpenJDK/Oralce 一切正常,我什至不添加任何--add-opens. 怎么解释?

编辑 2
我检查了Jetty pomWeld pom它们都具有相同的属性:

编辑 3
Java 版本

开始申请

这是堆栈跟踪

编辑 4
我发现由于焊接而发生了不同的行为。这是来自 ClassFileUtils 的片段:

正如您在第 88 行看到的那样,ti 调用了被 JPMS 阻止的 setAccessible(true) 方法。那么,考虑到 Weld 和 Jetty 在子 JPMS 层中,最后一个问题是否可以通过 JPMS 设置来解决这个问题?

0 投票
1 回答
589 浏览

java - 具有预览功能的 Maven Exec 插件

使用以下代码编译 Java 源代码很容易--enable-preview

但是你怎么能跑exec:java呢?使用

仍然导致以下错误: