Я создал простой JMOD
файл с помощью инструмента jmod как этотДобавить пользовательский JMOD на пути модуля с Java 9
$JAVA_HOME/bin/jmod create --class-path classes test/samples.jmod
Далее я попытался выполнить класс внутри этого модуля, запустив:
java -mp test -m de.mypackage/de.mypackage.Test
Что привело к следующим исключением:
Error occurred during initialization of VM
java.lang.module.ResolutionException: JMOD files not supported: test/samples.jmod
at java.lang.module.Resolver.findWithBeforeFinder([email protected]/Resolver.java:729)
at java.lang.module.Resolver.resolveRequires([email protected]/Resolver.java:86)
at java.lang.module.Configuration.resolveRequiresAndUses([email protected]/Configuration.java:370)
at java.lang.module.ModuleDescriptor$1.resolveRequiresAndUses([email protected]/ModuleDescriptor.java:1986)
at jdk.internal.module.ModuleBootstrap.boot([email protected]/ModuleBootstrap.java:263)
at java.lang.System.initPhase2([email protected]/System.java:1928)
Если бы я просто установить свой classes
(который я использовал для создания файла JMOD) в качестве модуля, все работает как ожидалось.
Как правило, невозможно получить файлы JMOD
на пути к модулю? И если это так, есть ли причина для этого?
Это делает Jigsaw менее универсальным в Облаке, чем, например, OSGi. Надеюсь, что в конечном итоге он может быть рассмотрен, в противном случае по сравнению с OSGi и другими модульными системами Jigsaw рискует стать другим эквивалентом «java.util.logging», который является частью JDK, но использовал намного меньше, чем другие превосходные альтернативы. –
Я думаю, что у Jigsaw есть другие цели, кроме OSGi. Основная цель - модуляция JDK, которая дает нам более быстрый запуск, меньшее потребление памяти и общую производительность. Для приложений он обеспечивает более чистое управление зависимостями и улучшенные правила видимости. – Lagrang
Немного, но то, что я слышал о «автомодуле» и о том, как Jigsaw планирует переопределить это в META-INF/MANIFEST, я предполагаю, что это может быть синергетическим для JAR, которые должны работать как модули Java 9 и до этого (или кроме того) также как пакеты OSGi. Цели могут быть не одинаковыми, но в идеале вам нужно только один ОДИН JAR, а не два для отдельных систем модулей ;-) –