我在使用Java 19的Maven插件时遇到了一个错误。Java 18运行正常。我该如何解决这个问题?
我在Centos 7.9.2009上的Docker容器中运行。当在Ubuntu 20.0 - kernel 5.15.0-52-generic上的同一容器中测试时,它工作正常。
堆栈跟踪如下所示。
Caused by: java.io.IOException: Function not implemented
Oct 28 12:12:49 at sun.nio.ch.FileChannelImpl.transferFrom0 (Native Method)
Oct 28 12:12:49 at sun.nio.ch.FileChannelImpl.transferFromDirectlyInternal (FileChannelImpl.java:804)
Oct 28 12:12:49 at sun.nio.ch.FileChannelImpl.transferFromDirectly (FileChannelImpl.java:833)
Oct 28 12:12:49 at sun.nio.ch.FileChannelImpl.transferFrom (FileChannelImpl.java:935)
Oct 28 12:12:49 at org.codehaus.plexus.util.FileUtils.doCopyFile (FileUtils.java:1077)
Oct 28 12:12:49 at org.codehaus.plexus.util.FileUtils.copyFile (FileUtils.java:1049)
使用的版本
Apache Maven 3.8.6 (84538c9988a25aec085021c365c560670ad80f63)
Java version: 19, vendor: Eclipse Adoptium, runtime: /opt/java/openjdk
OS name: "linux", version: "3.10.0-1160.76.1.el7.x86_64", arch: "amd64", family: "unix"
1条答案
按热度按时间1aaf6o9v1#
我很好奇,所以我深入调查了一下。看来我最初的评论是对的:您内核版本对于此特定函数来说太低:
FileChannelImpl.transferFrom0
my_copy_file_range_func
是否为非空,否则返回IOS_UNSUPPORTED
(可能就是这样)。copy_file_range
来初始化my_copy_file_range_func
。Linux 4.5于2016年3月发布,glibc 2.27于2018年2月发布。
由于libc实际上是由容器提供的,因此在使用它时(注意,像Alpine这样基于musl的容器可能有其他要求),确保您的 container 包含比2.27更新的glibc版本就足够了。
请注意,该函数的用户空间仿真不会提供真实的内核实现所能提供的零复制效率增益(即,它将比在更新的内核上运行更慢)。