[英]How to repackage JDK9's module
我试图在 Windows 10 下的管理员命令行中重新打包 JDK_ROOT\lib\modules 但收到错误消息:
//first extract modules's content
"C:\Program Files\Java\jdk-9.0.4\bin\jimage.exe" extract --dir="C:\Program Files\Java\jdk-9.0.4\lib\modules-extracted" "C:\Program Files\Java\jdk-9.0.4\lib\modules"
//try to repackage it and only contains java.base
"C:\Program Files\Java\jdk-9.0.4\bin\jlink.exe" -v --output "C:\Program Files\Java\jdk-9.0.4\lib\modules-repackaged" --module-path "C:\Program Files\Java\jdk-9.0.4\lib\modules-extracted" --add-modules java.base
//error:
jdk.tools.jlink.plugin.PluginException: Resource /java.base/java/lang/invoke/BoundMethodHandle$Species_D.class already present
根据@Alan Bateman 的评论,我在提取的文件夹中删除了“BoundMethodHandle$Species_***”(源代码中的 _L 除外),在这个阶段它很好。 但是在 Eclipse 中使用时,它说需要仪器但有更多错误:
//try java.intrument gives another error
"C:\Program Files\Java\jdk-9.0.4\bin\jlink.exe" -v --output "C:\Program Files\Java\jdk-9.0.4\lib\modules-repackaged" --module-path "C:\Program Files\Java\jdk-9.0.4\lib\modules-extracted" --add-modules java.base,java.instrument
//error
Unable to compute the hash of module java.instrument
顺便说一句,如何重新打包 JDK 以使其包含所有模块。即我可以使用“--add-modules *”之类的东西吗? 一个Java HelloWolrd除了底座和仪器外还需要哪些基本模块?
你可以在JDK中使用jmods来打包一个新的JDK
//first fork JDK9 or you may won't have an fully functional one
Xcopy /y /q /E /I "C:\Program Files\Java\jdk-9.0.4" "C:\Program Files\Java\jdk-9.0.4_repack"
//this is needed if you do this for the second time
rd /S /Q "C:\Program Files\Java\jdk-9.0.4_repack\jdk-9.0.4_repack"
//generate a meta-JDK from jmods
//it's called meta since the output is like a JDK
//but still missing some file to be used alone
"C:\Program Files\Java\jdk-9.0.4\bin\jlink.exe" -v --output "C:\Program Files\Java\jdk-9.0.4_repack\jdk-9.0.4_repack" --module-path "C:\Program Files\Java\jdk-9.0.4\jmods" --add-modules java.base,java.instrument
//combine the meta JDK with the forked JDK
//(close Eclipse first if it is referencing "C:\Program Files\Java\jdk-9.0.4_repack")
Xcopy /y /q /E /I "C:\Program Files\Java\jdk-9.0.4_repack\jdk-9.0.4_repack" "C:\Program Files\Java\jdk-9.0.4_repack"
现在您可以将“C:\Program Files\Java\jdk-9.0.4_repack”作为另一个 JDK/JRE 选项添加到 Eclipse 并在应用程序中使用它。 此 JDK 仅包含您添加的模块。
去做:
(1) 也许 jlink 可以生成完整的 JDK 而不是具有更正确参数的“元版本”
(2) 使用 jmod 命令在 "C:\Program Files\Java\jdk-9.0.4\jmods" 中提取一些 jmods 然后编辑内容例如删除一些 class 然后重新打包 jmods 然后在 jlink 中使用它们。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.