问题标签 [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.
java - 如何在允许版本切换的 Mac OSX 上安装 Java?
我想在 Mac OSX 上安装 OpenJDK Java 并让它与其他 JDK 一起工作,因为它是一个较新的版本。目前,我下载了 tar.gz 并将其放在我的路径中,但这很难维护。
我发现的唯一其他自动执行更多操作的安装是通过 Homebrew cask 安装。它看起来也只有当前版本:
显示:
java: 13,33:5b8a42f3905b406298b72d750b6919f6
https://openjdk.java.net/
所以我可以从那里安装它,但是然后呢?我只坚持新版本吗?
java - 何时以及如何在 flatMap 上执行 1 到 0..n 映射 Stream mapMulti
我一直在浏览最新的 LTE Java 17 版本的新闻和源代码,并且遇到了名为mapMulti
. 早期访问JavaDoc说它类似于flatMap
.
- 如何使用此方法执行 1 到 0..n 映射?
- 新方法如何工作以及它与
flatMap
. 每个人什么时候更可取? mapper
可以调用多少次?
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 上遇到此错误
java - 不同包中的类的密封类
如果我声明遵循密封的层次结构
不使用模块(没有module-info.java)并尝试用Maven编译它我得到
我知道https://openjdk.java.net/jeps/409和本节:
permit 指定的类必须位于超类附近:在同一个模块中(如果超类在命名模块中)或在同一个包中(如果超类在未命名模块中)。
但是,默认情况下 Maven 不应该在编译时使用类路径吗?可以完全避免这种限制吗?
如果不是,这是否开创了一个先例,模块路径上的功能比类路径上的功能更灵活,反过来 - 虽然仍然支持类路径,但与模块路径相比,它不像以前那样是一等公民?
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 参数。我该如何避免这种情况?
java - 如何使反射在 JDK 16 及更高版本上工作?
我有以下迁移到 Java 16 的遗留代码,但是由于这个新版本引入的强封装,它不起作用:
有没有办法让它工作?
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 版本来查看是否可以解决它。
非常感谢任何指针。
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
:
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 或我的本地安装的问题。