https://blogs.oracle.com/sundararajan/entry/extracting_a_single_class_file
JavaのFile System APIをNashorn JavaScriptから利用して、Java 9プラットフォームのjimageモジュールファイルから、一つの.classファイルを抽出することができます。
FileSystem (Java Platform SE 8)以下のシンプルなNashornスクリプトを使って、指定されたクラス名の.classを抽出します。
https://docs.oracle.com/javase/8/docs/api/java/nio/file/FileSystem.html
Nashorn - OpenJDK Wiki
https://wiki.openjdk.java.net/display/Nashorn/Main
JEP 220: Modular Run-Time Images
http://openjdk.java.net/jeps/220
File: jextract.js
上記スクリプトを使って、以下のように実行してみましょう。一つ目はVector.class、二つ目はScriptObjectMirror.classをファイルに抽出することができます。// This script extracts .class for a single class // from the platform jimage ($JDK9/lib/modules) file. // Specify module/class like java.base/java.util.Vector if (arguments.length == 0) { print("Usage: jjs jextract -- <module>/<classname>") exit(1) } // Java types used from file system and net API var FileSystems = Java.type("java.nio.file.FileSystems") var Files = Java.type("java.nio.file.Files") var URI = Java.type("java.net.URI") var name = arguments[0] var moduleName = name.substring(0, name.indexOf('/')) var className = name.substring(name.indexOf('/') + 1) var pathName = "/modules/" + moduleName + "/" + className.replace(/\./g, '/') + ".class" // get jrt fs file system instance var fs = FileSystems.getFileSystem(URI.create("jrt:/")) // read .class content var content = Files.readAllBytes(fs.getPath(pathName)) // write to a file in current dir (using default fs) // simple class name var simpleName = className.substring(className.lastIndexOf('.') + 1) Files.write(FileSystems.default.getPath(simpleName + ".class"), content)
$ jjs jextract.js -- java.base/java.util.Vector $ jjs jextract.js -- jdk.scripting.nashorn/jdk.nashorn.api.scripting.ScriptObjectMirror
0 件のコメント:
コメントを投稿