繁体   English   中英

如何重新打包JDK9的模块

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM