如何使用JDK 9 jar工具的--hash-modules和--module-path选项?

时间:2017-07-29 08:21:01

标签: jar java-9 module-path

我想计算并记录由给定模式匹配的模块的散列,该模式直接依赖于正在更新的模块化JAR文件。为此,请使用--hash-modules--module-path选项。 有我的尝试:

jar --hash-modules com.me.util --module-path "dist\com.me.jar;dist\com.me.util.jar"  --update --file dist/com.me.jar --main-class=com.me.A --verbose --module-version 0.1 -C build/modules/com.me module-info.class build/modules/com.me/com/me/A.class build/modules/com.me/com/me/B.class

jar --hash-modules "com.me.util;com.me.util" --module-path "dist\com.me.jar;dist\com.me.util.jar"  --update --file dist/com.me.jar --main-class=com.me.A --verbose --module-version 0.1 -C build/modules/com.me module-info.class build/modules/com.me/com/me/A.class build/modules/com.me/com/me/B.class

当我尝试这样做时,我收到警告消息:" com.me"中没有记录任何模块的哈希值。

这些命令将创建* .jar文件(模块)而没有任何错误,但是他们不会添加任何哈希信息。我希望看到此信息并利用此功能(--hash-modules--module-path选项)。请告诉我该怎么做!

可以找到项目文件夹的完整结构here

我使用jar工具选项的实验和工作示例是here

Java Platform, Standard Edition Tools Reference (jar)中描述的以下操作。

2 个答案:

答案 0 :(得分:4)

Uddhav Gautam,感谢您提供link其他文档。

仔细阅读文档(Packaging: Modular JAR files (JEP 261: Module System)--hash-modules=PATTERN (Java Platform, Standard Edition Tools Reference))后,我意识到应该给出什么参数来解决这个问题。

这是一个有效的例子:

$patient = Patient::where('name', '=', 'Bob')->get(); //you could have more than one bob
if (!count($patient)) {
    return 'No records found';
}

要查看选项的结果,请使用以下命令:

#Working command:
#Create module:
jar --hash-modules "com.me" --module-path "dist/com.me.jar" --verbose --create --file dist/com.me.util.jar -C build/modules/com.me.util module-info.class  build/modules/com.me.util/com/me/util/Util.class
jar --hash-modules "com.me" --module-path "dist/com.me.jar" -v -c -f dist/com.me.util.jar -C build/modules/com.me.util module-info.class  build/modules/com.me.util/com/me/util/Util.class

#Update module:
jar --hash-modules "com.me" --module-path "dist/com.me.jar" --verbose --update --file dist/com.me.util.jar -C build/modules/com.me.util module-info.class
jar --hash-modules "com.me" --module-path "dist/com.me.jar" -v -u -f dist/com.me.util.jar -C build/modules/com.me.util module-info.class

结果应该是这样的:

#Describe module:
jar --file dist/com.me.util.jar --describe-module

答案 1 :(得分:2)

--hash-modules <ProvidePatternHere> / *你缺少模式* /

http://openjdk.java.net/jeps/261

仅为名称与正则表达式

匹配的模块记录哈希值
--module-path <LinkToModule>

因此,一个完整的例子如下所示:

jar --hash-modules "*.jar" --module-path "dist" ... and your other stuffs here.