问题标签 [java-17]

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 投票
11 回答
352176 浏览

java - 如何在允许版本切换的 Mac OSX 上安装 Java?

我想在 Mac OSX 上安装 OpenJDK Java 并让它与其他 JDK 一起工作,因为它是一个较新的版本。目前,我下载了 tar.gz 并将其放在我的路径中,但这很难维护。

我发现的唯一其他自动执行更多操作的安装是通过 Homebrew cask 安装。它看起来也只有当前版本:

显示:

java: 13,33:5b8a42f3905b406298b72d750b6919f6
https://openjdk.java.net/

所以我可以从那里安装它,但是然后呢?我只坚持新版本吗?

0 投票
2 回答
1426 浏览

java - 何时以及如何在 flatMap 上执行 1 到 0..n 映射 Stream mapMulti

我一直在浏览最新的 LTE Java 17 版本的新闻和源代码,并且遇到了名为mapMulti. 早期访问JavaDoc说它类似于flatMap.

  • 如何使用此方法执行 1 到 0..n 映射?
  • 新方法如何工作以及它与flatMap. 每个人什么时候更可取?
  • mapper可以调用多少次?
0 投票
3 回答
1088 浏览

java - 分析时版本 17 的“未找到依赖项”

我正在研究的项目之一具有以下相关配置:

在执行mvn clean verify(apache-maven-3.6.3, java : 17-ea) 时,构建按预期成功。我现在对属性进行了更改,以 将源和目标替换为发布:

终端上的日志读取

导致失败(因为警告)!为什么/如何在 Java 版本的升级中对依赖项进行不同的处理?有任何解决这个问题的方法吗?


如果可能有帮助,此目标的调试日志如下:

使用复制:

  1. Git 签出这个分支
  2. 配置 Maven 以使用 Java-17。
  3. failOnWarning将属性编辑为true
  4. 执行mvn clean verify
0 投票
1 回答
7640 浏览

java - java.lang.reflect.InaccessibleObjectException:从 java 11 升级到 17 时无法创建受保护的最终 java.lang.Class

我们的项目使用 [schema-repo-server][1]。启动 schema-repo-server 的代码如下 -

此代码在 java11 中运行良好。

我正在将 java 版本从 java 11 升级到 java 17。升级后,当我启动服务时,出现以下错误。

注意:启动列表中的模块是 --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.util=ALL-UNNAMED --add-opens jdk.management/com .sun.management.internal=全部未命名

我该如何解决这个问题?

14:18:48 INFO [org.schemarepo.server.RepositoryServer] 在线程“main”com.google.inject.internal.util.$ComputationException: java.lang.ExceptionInInitializerError 中通过 SLF4J 路由 java.util.logging 流量.google.inject.internal.util.$MapMaker$StrategyImpl.compute(MapMaker.java:553) 在 com.google.inject.internal.util.$MapMaker$StrategyImpl.compute(MapMaker.java:419) 在 com.google .inject.internal.util.$CustomConcurrentHashMap$ComputingImpl.get(CustomConcurrentHashMap.java:2041) 在 com.google.inject.internal.FailableCache.get(FailableCache.java:50) 在 com.google.inject.internal.ConstructorInjectorStore。 get(ConstructorInjectorStore.java:49) 在 com.google.inject.internal.ConstructorBindingImpl.initialize(ConstructorBindingImpl.java:125) 在 com.google.inject.internal.InjectorImpl.initializeBinding(InjectorImpl.java:507)在 com.google.inject.internal.ProcessedBindingData.initializeBindings(ProcessedBindingData.java:44) 在 com.google.inject 的 com.google.inject.internal.AbstractBindingProcessor$Processor$1.run(AbstractBindingProcessor.java:159)。 internal.InternalInjectorCreator.initializeStatically(InternalInjectorCreator.java:122) 在 com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:106) 在 com.google.inject.Guice.createInjector(Guice.java:95) 在 com .google.inject.Guice.createInjector(Guice.java:72) at com.google.inject.Guice.createInjector(Guice.java:62) at org.schemarepo.server.RepositoryServer.(RepositoryServer.java:97) at technorati .tut.fes.Main2.main(Main2.java:12) 原因:com.google.inject.internal.cglib.reflect.$FastClassEmitter.(FastClassEmitter.java:67) com.google 的 java.lang.ExceptionInInitializerError .com.google.inject.internal.cglib.core.$DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:25) 上的 inject.internal.cglib.reflect.$FastClass$Generator.generateClass(FastClass.java:72)。 com.google.inject.internal.cglib.reflect.$FastClass$Generator.create(FastClass.java:64) 上的 inject.internal.cglib.core.$AbstractClassGenerator.create(AbstractClassGenerator.java:216)。在 com.google.inject.internal.DefaultConstructionProxyFactory.create(DefaultConstructionProxyFactory.java:53) 在 com.google.inject.internal.ProxyFactory.create(ProxyFactory.java: 153) 在 com.google.inject.internal.ConstructorInjectorStore.createConstructor(ConstructorInjectorStore.java:89) 在 com.google.inject.internal.ConstructorInjectorStore.access$000(ConstructorInjectorStore.java:28) 在 com.google.inject.internal.ConstructorInjectorStore$1.create(ConstructorInjectorStore.java:36) 在 com.google.inject.internal.ConstructorInjectorStore$1.create(ConstructorInjectorStore.java:32) 在 com.google.inject.internal .FailableCache$1.apply(FailableCache.java:39) at com.google.inject.internal.util.$MapMaker$StrategyImpl.compute(MapMaker.java:549) ... 15 更多原因:java.lang.reflect。 InaccessibleObjectException:无法使受保护的最终 java.lang.Class java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain) 抛出 java.lang.ClassFormatError 可访问:模块 java .base 不会“打开 java.lang”到 java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:357) 的 java.base/java.lang.reflect.AccessibleObject 的未命名模块 @f0c8a99。checkCanSetAccessible(AccessibleObject.java:297) 在 java.base/java.lang.reflect.Method.checkCanSetAccessible(Method.java:199) 在 java.base/java.lang.reflect.Method.setAccessible(Method.java:193)在 com.google.inject.internal.cglib.core.$ReflectUtils$2.run(ReflectUtils.java:56) 在 java.base/java.security.AccessController.doPrivileged(AccessController.java:312) 在 com.google.inject .internal.cglib.core.$ReflectUtils.(ReflectUtils.java:46) ... 29 更多(ReflectUtils.java:46) ... 29 更多(ReflectUtils.java:46) ... 29 更多

进程以退出代码 1 结束

这工作正常 [1]:https ://mvnrepository.com/artifact/org.schemarepo/schema-repo-server 。

注意:我添加了 vm 参数 --illegal-access=permit --add-opens java.base/java.lang=ALL-UNNAMED,但我仍然在 java-17 上遇到此错误

0 投票
1 回答
502 浏览

java - 不同包中的类的密封类

如果我声明遵循密封的层次结构

不使用模块(没有module-info.java)并尝试用Maven编译它我得到

我知道https://openjdk.java.net/jeps/409和本节:

permit 指定的类必须位于超类附近:在同一个模块中(如果超类在命名模块中)或在同一个包中(如果超类在未命名模块中)。

但是,默认情况下 Maven 不应该在编译时使用类路径吗?可以完全避免这种限制吗?

如果不是,这是否开创了一个先例,模块路径上的功能比类路径上的功能更灵活,反过来 - 虽然仍然支持类路径,但与模块路径相比,它不像以前那样是一等公民?

0 投票
0 回答
2918 浏览

java - 在 Java 17 中,如何避免使用 --add-opens?

从 Java 17 开始--illegal-access,它实际上已经过时了https://openjdk.java.net/jeps/403

对此选项的任何使用,无论是使用 permit、warn、debug 还是拒绝,都只会发出警告消息,不会产生任何影响。我们希望在未来的版本中完全删除 --illegal-access 选项。

因此,使用 openjdk17 早期访问版本,我发现jackson https://github.com/FasterXML/jackson-databind/issues/3168存在问题。在我看来,他们提倡--add-opens使用并努力设想一个整体的“修复”。

我想避免添加--add-opens,因为如果不是jackson,它就是下一个依赖项。由于依赖项更改,我不想跨环境更改 JVM 参数。我该如何避免这种情况?

0 投票
2 回答
1734 浏览

java - 如何使反射在 JDK 16 及更高版本上工作?

我有以下迁移到 Java 16 的遗留代码,但是由于这个新版本引入的强封装,它不起作用:

有没有办法让它工作?

0 投票
1 回答
5143 浏览

java - Gradle 7.2 Java 17 构建问题 java.lang.NullPointerException:无法读取字段“bindingsWhenTrue”,因为“currentBindings”为空

测试将一些服务升级到 Java 17,因为它是 GA 并且在编译 Gradle 7.2 Spring Boot 应用程序时遇到了以下问题:

也偶然发现了这个问题https://bugs.openjdk.java.net/browse/JDK-8272981但这似乎已关闭,因为 JDK 将尝试不同的 gradle 版本来查看是否可以解决它。

非常感谢任何指针。

0 投票
1 回答
440 浏览

java - Java 17 记录类上的 UnknownElementException

今天怀着激动的心情下载了Java 17,得到了一个简单的记录类

但是,当这样做时mvn compile,它会给我带来错误 Fatal error compiling: javax.lang.model.element.UnknownElementException: Unknown element: "com.xxx.TestCls"

我仔细检查了一下java -version,它看起来对我来说是正确的:

有人会有线索吗?提前致谢!


补充:我的 maven 版本是3.5.4.
pom文件中的maven设置:

2021.1.2在 M1 芯片上使用 Intellij。但是我在终端中尝试了 mvn compile ,它给了我同样的错误。
该类Party是在同一个项目中定义的。

整个pom文件:

和堆栈跟踪mvn compile -e

0 投票
2 回答
672 浏览

java - JDK 17:Switch 语句导致 java.lang.VerifyError:操作数堆栈上的类型错误

刚刚在 Eclipse 2021-09 上尝试了 JDK17,但它失败了java.lang.VerifyError,这本身并没有多大帮助。我将它追踪到一个 switch 语句,该语句得到一个从一个Map或另一个泛型类型中提取的值。如果我在 switch 语句中使用局部变量,一切都会按预期工作。

测试代码:

这会引发以下错误:

还没有在 11 和 17 之间尝试另一个 JDK。交换机在这些版本之间获得了一些新功能,所以可能就是这样。也许这是 Eclipse JDT 或我的本地 JDK 中的问题,因此任何尝试在另一个配置或 IDE 上重现此错误都会很棒。尝试在 macOS 上使用 OpenJDK(内部版本 17+35-2724)。

编辑: 也发生在

很可能是新 JDT for Java 17 或我的本地安装的问题。