如何重新打包JDK9的模块

问题描述 投票:1回答:1

我尝试在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

BTW如何重新打包JDK,使其包含所有模块。我可以使用“ --add-modules *”之类的东西吗? Java HelloWolrd除了基础和工具之外还需要哪些基本模块?

java java-9 jlink
1个回答
0
投票

您可以在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”中提取一些jmod,然后编辑内容,例如删除一些类,然后重新打包jmod,然后在jlink中使用它们。

© www.soinside.com 2019 - 2024. All rights reserved.