我目前正在尝试从 jdk 中提取预览类文件,例如 jrt-fs.jar 中的 java.lang.Record (在 libs 文件夹中),但是在迭代它时找不到预览类,例如 Record 。这是我正在使用的代码:
Path jrtFsJar = jdk15Home.resolve("lib").resolve("jrt-fs.jar");
jrtFsJarLoader = new URLClassLoader(new URL[] {jrtFsJar.toUri().toURL()});
FileSystem jrtFs = FileSystems.newFileSystem(
URI.create("jrt:/"),
Collections.emptyMap(),
jrtFsJarLoader);
Files.walk(jrtFs.getPath("/modules")).forEach(path ->
// Here is walks over classes such as "modules/java.base/java/lang/Object.class"
// but not over "modules/java.base/java/lang/Record.class"
)
我也尝试过更直接的方法:
FileSystem fs = FileSystems.getFileSystem(URI.create("jrt:/"));
// Object works, I get the bytes.
byte[] object = Files.readAllBytes(jrtFs.getPath("modules", "java.base",
"java/lang/Object.class"));
// Record fails, NoSuchFile.
byte[] object = Files.readAllBytes(jrtFs.getPath("modules", "java.base",
"java/lang/Record.class"));
现在,当我使用 --enable-preview 运行完全相同的 jdk 时,我可以使用记录。
如何从 jdk linux/lib 中提取 Record 类?预览课程在里面还是我应该在其他地方寻找它们?我需要一个特定的标志来访问它们吗?
任何帮助表示赞赏。