问题标签 [openjdk-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 投票
0 回答
62 浏览

spring-boot - openjdk17 的 Xstream 编组问题

我刚刚将我的 Spring Boot 应用程序从 Java 11 升级到 17。我正在使用 Spring 集成XstreamMarshaller并将MessageConverterActiveMQ Artemis 消息(XML 格式)转换为 Java 对象,但XstreamMarshaller该类似乎无法与 openjdk 17 一起正常工作。这是例外:

这是侦听器 bean 配置:

版本:

  • 弹簧启动:2.5.6
  • Xstream:1.4.18
  • 春牛:5.3.12
0 投票
1 回答
233 浏览

java - JDK 17 中针对接口的反射调用

我将我的项目迁移到 JDK 17。除了一件事之外,一切都很好:

据我了解,实现接口路径的下划线类,由于范围有限,不能称为。如何使用 Path 接口声明反射调用?或者还有什么技巧?

例外:

java.lang.IllegalAccessException:类 org.aldan3.util.TemplateEngine 无法访问类 sun.nio.fs.UnixPath(在模块 java.base 中),因为模块 java.base 不会将 sun.nio.fs 导出到未命名的模块 @c12d4d java.base/java.lang.reflect.AccessibleObject.checkAccess(AccessibleObject.java:674) 的 java.base/java.lang.reflect.AccessibleObject.checkAccess(AccessibleObject.java:674) 的 java.base/jdk.internal.reflect.Reflection.newIllegalAccessException(Reflection.java:392)。 reflect.Method.invoke(Method.java:560) at org.aldan3.util.TemplateEngine.processMethodCall(TemplateEngine.java:1731) at org.aldan3.util.TemplateEngine.process(TemplateEngine.java:1397) at org.aldan3 .util.TemplateEngine.process(TemplateEngine.java:852) 在 org.aldan3.util.TemplateEngine.processResource(TemplateEngine.java:259) 在 org.aldan3.util.TemplateEngine.process(TemplateEngine.java:392) 在 org. aldan3.util.TemplateEngine。processResource(TemplateEngine.java:259) at org.aldan3.util.TemplateEngine.process(TemplateEngine.java:432) at org.aldan3.util.TemplateEngine.processResource(TemplateEngine.java:259) at org.aldan3.util.TemplateEngine .process(TemplateEngine.java:280) 在 org.aldan3.servlet.BasePageService.processView(BasePageService.java:381) 在 org.aldan3.servlet.BasePageService.serve(BasePageService.java:222) 在 org.aldan3.servlet。 FrontController.doRequest(FrontController.java:244) at org.aldan3.servlet.FrontController.service(FrontController.java:159) at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) at rogatkin.web.WebAppServlet $SimpleFilterChain.doFilter(WebAppServlet.java:3599) 在 rogatkin.web.WebAppServlet$WebAppContextFilter.doFilter(WebAppServlet.java:3219) 在 rogatkin.web.WebAppServlet$SimpleFilterChain.doFilter(WebAppServlet.java:3571) 在 rogatkin.web.WebAppServlet.service(WebAppServlet.java:1464) 在 Acme.Serve.Serve$ServeConnection.runServlet(Serve.java:2407) 在 Acme.Serve.Serve$ServeConnection.parseRequest(Serve.java:2326 ) 在 Acme.Serve.Serve$ServeConnection.run(Serve.java:2110) 在 Acme.Utils$ThreadPool$PooledThread.run(Utils.java:1238) 在 java.base/java.lang.Thread.run(Thread.爪哇:833)

异常源

将对象添加到 Map 然后将使用反射调用它的方法

由于这里有很多对问题的误解,我创建了一个最小的测试示例,如 Unmitigated 指出的

这个问题看起来很有趣,所以我来自 Meta 的朋友问我是否可以展示任何用例。我当然可以。 一个用例

0 投票
1 回答
339 浏览

java - 为什么 Java 17 在将任务添加到 ForkJoinPool 时会抛出 RejectedExecutionException?

我使用 Java 16 通过 HTTP 向 API 发出请求。为了加快整体速度,我已将其加载到自定义ForkJoinPool. 我在下面编译了一个复制示例。

由于迁移到 Java 17(openjdk build 17.0.1+12-39),这会引发 RejectedExecutionException:

为什么会这样?我不知道的关于 ForkJoinPool 的一些变化吗?

代码

0 投票
1 回答
465 浏览

java - 在java8中编译我的项目然后在java 17上运行它是否可行

我已经阅读了几篇在 jdk 9 中删除 .* API 的文章。删除是否意味着它们已从 jdk 9 中完全删除,或者它们被标记为已弃用?

鉴于上述陈述,如果项目是 jdk 8 编译的,它会在 jdk 17 上运行而没有任何问题吗?我是第一次尝试这个,并且由于模块化更改,tomcat 无法支持 jdk 8。

我计划在 jdk 8 中编译,然后在 jdk 17 上运行,直到整个项目符合 jdk 17 (通过 jdk 17 兼容,我的意思是使用更新的 API,而不是现有的 jdk8 已弃用的 API)。

我是否朝着正确的方向前进?还是我应该采用不同的迁移方法?

0 投票
1 回答
135 浏览

java - 最新版 jdk17 和 javafx17 的 rt.jar 和 jfxrt.jar 的等效库是什么?

我的任务是使用旧的 java 升级旧的桌面应用程序,它使用rt.jarjfxrt.jar库。我已经在网上搜索了有关库(rt.jar& jfxrt.jar)的信息,但显然它在 Java 17 和 JavaFX 17 中不再存在。最新版本的 Java 17 和 JavaFX 17rt.jar的等效库是什么?jfxrt.jar

0 投票
0 回答
17 浏览

tomcat9 - Eclipse:目标运行时 (Tomcat 9) 使用了不正确的 JRE

我正在运行 Eclipse 2021-09。唯一安装的 JRE 是 OpenJDK 17。我配置的运行时环境是 Tomcat 9.0.54。Tomcat 配置为使用 JDK 17。安装了 Java 17 支持的市场更新。

我无法将任何项目部署到 Tomcat。它抱怨不支持方面(动态 Web 模块 2.5、Java 17、Javascript 1.0),并提到了 Java 版本。

一切都设置为 Java 17,但是,在显示运行时时,我终于在 Projects Facets 中看到了一个问题。我必须单击显示所有运行时,然后如果我选择 Tomcat9,它会在运行时组合下向我显示正在使用 Java 运行时环境 v11。(请参考图片)。

我不知道为什么会发生这种情况或如何更改此配置。有任何想法吗?

项目构面配置

0 投票
1 回答
91 浏览

java - 使用 jdk17 运行 Java 8 批处理时出错

我正在尝试使用 jdk17 运行 java 8 批处理,该项目是使用 jre1.8.0_192 构建的,我在 VM 中放置了以下选项:

--add-modules=ALL-SYSTEM --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.math=ALL-UNNAMED --add-opens=java .base/java.net=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=jdk.attach/sun.tools.attach=ALL-UNNAMED -Djava.locale .providers=JRE,SPI

我在运行时收到以下错误:

java.lang.NullPointerException:无法调用“Object.getClass()”,因为“obj”在 java.lang.reflect.Method.invoke(Method.java:561) ~[?:?] at org.springframework.aop 处为空.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:333) ~[spring-aop-4.3.25.RELEASE.jar:4.3.25.RELEASE] at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java: 190)~[spring-aop-4.3.25.RELEASE.jar:4.3.25.RELEASE] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)~[spring-aop-4.3.25 .RELEASE.jar:4.3.25.RELEASE] 在 org.springframework.batch.core.configuration.annotation.SimpleBatchConfiguration$PassthruAdvice.invoke(SimpleBatchConfiguration.java:127) ~[spring-batch-core-3.0.10.RELEASE. jar:3.0.10.RELEASE] 在 org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) ~[spring-aop-4.3.25.RELEASE.jar:4.3.25.RELEASE] at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy .java:213) ~[spring-aop-4.3.25.RELEASE.jar:4.3.25.RELEASE]

有任何想法吗 ?谢谢

0 投票
1 回答
134 浏览

java - 带有 jdk17 的 Maven 反应器中的传递依赖

我正在将一个大型应用程序升级到 JDK17。今天,该项目使用 JDK11 和 maven 编译良好。

使用 JDK17,我对传递依赖的版本有一个非常奇怪的问题。

本项目由多个子模块组成。如果我直接编译一个模块,它工作正常。

但是,如果我编译根模块或任何包含子模块的模块,传递依赖的解析不起作用。我有如下错误:

依赖的版本${project.version}不是真实的版本。该项目不camel-netty4直接使用,但是camel-syslog

这只是一个例子,其他项目因其他传递依赖而失败。如果我直接编译子模块,它就可以工作。

Maven 3.6.3

0 投票
1 回答
3157 浏览

java - 无法使用 Maven 3.8 编译 JDK 17:错误:模块 jdk.compiler 不会“打开 com.sun.tools.javac.processing”到未命名的模块

我正在尝试使用 JDK 17 和 Maven 3.8.4 编译现有的 Spring Boot 项目,但我不断收到此错误。

无法使字段私有 com.sun.tools.javac.processing.JavacProcessingEnvironment$DiscoveredProcessors com.sun.tools.javac.processing.JavacProcessingEnvironment.discoveredProcs 可访问:模块 jdk.compiler 没有“打开 com.sun.tools.javac.processing " 到未命名的模块 @521e3470

3.6 等旧版本的 Maven 也会出现此问题。java.versionJDK 16 也会发生这种情况。通过、maven.compiler.source和.在 pom.xml 中配置的 Java 版本无关紧要maven.compiler.target。只有用于进行编译的 JDK 版本...显示在mvn -v命令中。

该项目使用 JDK 15 编译良好。编译开始时立即发生错误,就在说明正在编译多少类的 INFO 消息之后。发生在我的 Windows 笔记本电脑和 Ubuntu CI 服务器中。

任何想法这可能是什么?

编辑:添加更多的 POM 文件。

编辑:我也使用龙目岛

编辑:我认为这与另一个问题不是同一个问题,因为我通过错误消息进行了搜索,而另一个问题从未出现在结果中。要解决这个问题,您需要知道该错误与 Lombok 有关。该错误没有提供龙目岛是罪魁祸首的线索。

0 投票
0 回答
594 浏览

spring - Spring Boot启动失败:无法生成类BasicErrorController的CGLIB子类

我正在升级我们的 Spring-Boot 应用程序 (2.5.6) 以使用 Java 17,我们将amazoncorretto:11-al2-jdk使用amazoncorretto:17-al2-jdkOpenJDK 17 的发行版。

在将我们的 Docker 基础映像添加到 Docker 映像中amazoncorretto:17-al2-jdk并将其全部打包后,应用程序无法启动,原因是:

根据错误消息,似乎 Spring 尝试生成一个子类,BasicErrorController但由于attempted duplicate class definition. (BasicErrorController 来自 Spring-Boot 库)。我已经尝试阅读 CGLIB 逻辑,但我无法弄清楚什么是错误/重复的类(并且我找不到任何最终类,正如错误消息建议所暗示的那样)。

有什么想法可以解决这个问题吗?

当我使用与 docker 映像中相同的 jdk17 直接从 IntelliJ IDE 运行应用程序时,它工作正常。


编辑:启用堆栈跟踪和调试级别的更多日志


更新:我设法确定了导致问​​题的文件。如果我删除该文件,它可以在 JDK17 上正常工作。

稍微研究一下方面逻辑后,可以看到这段代码在所有控制器上添加了建议。向我的应用程序添加包切入点限制后,它可以正常启动@Pointcut("within(one.goranson..*)")