我專門使用帶有 Java 19 的 Maven 插件時出錯。Java 18 運行良好。我該如何解決這個問題?
我在 Centos 7.9.2009 上的 Docker 容器中運行。在 Ubuntu 20.0 - 內核 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"
uj5u.com熱心網友回復:
我很好奇,所以我深入研究了這個問題。看來我原來的評論是正確的:你的內核版本對于這個特定的功能來說太早了:
FileChannelImpl.transferFrom0在這里實作- 它首先檢查是否
my_copy_file_range_func為非空,IOS_UNSUPPORTED否則回傳(這可能是發生的情況)。 my_copy_file_range_func顯然是通過尋找符號在這里初始化copy_file_range的。- 根據此手冊頁,系統呼叫已添加到 Linux 內核 4.5,但自 2.27 以來由 glibc 在用戶空間中模擬。
Linux 4.5 于 2016 年 3 月發布,glibc 2.27 于 2018 年 2 月發布。
由于 libc實際上是由容器提供的,因此在使用它時(請注意,像 Alpine 這樣的基于 musl 的容器可能有其他要求)應該足以確保您的容器包含比 2.27 更新的 glibc 版本。
請注意,該功能的用戶空間模擬不會提供真正內核實作可以提供的零拷貝效率增益(即它會比在更新的內核上運行慢)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/524004.html
上一篇:maven-shade-plugin:pom:3.2.4在上次嘗試錯誤期間無法從http://repo.maven.apache.org/maven2傳輸
下一篇:Docx4jJc選項
