gpt4 book ai didi

TrueZip 7 需要 Java 7? NoClassDefFound错误: java/nio/file/Path on Java 6

转载 作者:行者123 更新时间:2023-12-02 10:28:25 24 4
gpt4 key购买 nike

TFile依赖于 java.nio.file.Path(toPath() 方法返回 java.nio.file.Path),该路径在 Java 6 上不可用,因此在 Java 6 上调用任何 TFile 方法都会抛出“java.lang.NoClassDefFoundError: java/nio”/文件/路径”

如何在 Java 6 上使用 TFile?我正在考虑的是获取源代码,在没有这种方法的情况下重新编译它们,并使用修补版本,这是一种令人不愉快的解决方案。

最佳答案

不,TrueZIP 7 不需要 JSE 7,JSE 6 作为主页文档就足够了。但是,某些功能仅在 JSE 7 上可用(例如 TrueZIP Path 模块),因此需要执行运行时测试。

使用正确的类加载器实现,您将永远不会看到 NoClassDefFoundError。然而,某些环境已经破坏了类加载器的实现,尽管规范强制要求延迟类加载,但仍会进行急切的类加载。只有这样你才会得到一个NoClassDefFoundError。

另外,请注意该项目的 Eclipse 许可证。如果您确实想通过修补来解决此问题(您不能,因为 java.io.File 和 java.nio.file.Path 之间存在循环依赖关系,这就是此设计的原因),那么您必须发布此分支.

附录:

Java 6 的 Java 语言规范,chapter 12.2.1 "The Loading Process"内容如下:

Different subclasses of ClassLoader may implement different loading policies. In particular, a class loader may cache binary representations of classes and interfaces, prefetch them based on expected usage, or load a group of related classes together. These activities may not be completely transparent to a running application if, for example, a newly compiled version of a class is not found because an older version is cached by a class loader. It is the responsibility of a class loader, however, to reflect loading errors only at points in the program where they could have arisen without prefetching or group loading.

英语不是我的母语,但我从最后一句话中得知,只要类加载器不会仅仅因为未使用的类未能急切加载而抛出错误,急切的类加载就可以。因此,如果类加载器由于 TFile.toPath() 需要返回 java.nio.file.Path 而抛出,尽管您从未调用此方法,那么我认为这是类加载器的问题。顺便说一句,TFile.toPath() 会抛出 UnsupportedOperationException - 请检查 Javadoc 了解详细信息。

我更愿意采取另一条路线,但 java.io.File.toPath() 和 java.nio.file.Path.toFile() 之间的循环依赖让我别无选择。

关于TrueZip 7 需要 Java 7? NoClassDefFound错误: java/nio/file/Path on Java 6,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14270141/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com