Как использовать опции --hash-modules и --module-path инструмента JDK 9 jar?

Я хотел бы вычислить и записать хэш модуля, соответствующий заданному шаблону, который напрямую зависит от обновляемого модульного файла 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 опции). Пожалуйста, скажите мне, как это сделать!


С полной структурой папок проекта можно ознакомиться здесь.

Мои эксперименты и рабочие примеры использования опций инструмента jar находятся здесь.

Следующие операции описаны в Java Platform, Standard Edition Tools Reference (jar).

2 ответа

Решение

Uddhav Gautam, спасибо за ссылку на дополнительную документацию.

Внимательно прочитав документацию ( Упаковка: модульные файлы JAR (JEP 261: модульная система) и --hash-modules=PATTERN (Java Platform, Standard Edition Tools Reference)), я понял, какие параметры должны быть заданы для решения этой задачи.

Вот рабочий пример:

#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

Результат должен быть таким:

com.me.util jar:file:///C:/my_ch1_9/dist/com.me.util.jar/!module-info.class
exports com.me.util
requires java.base mandated
hashes com.me SHA-256 85c0539e4ca9a01b00f4c29a1a8b01cd452d1d97f437166b8bb415046dac65cb

--hash-modules <ProvidePatternHere> /* вам не хватает шаблона * /

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

Хэши записываются только для модулей, имена которых соответствуют регулярному выражению

--module-path <LinkToModule>

Итак, полный пример будет примерно таким:

jar --hash-modules "*.jar" --module-path "dist" ... and your other stuffs here.
Другие вопросы по тегам