2016-07-08 2 views
7

Я создал простой 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 на пути к модулю? И если это так, есть ли причина для этого?

ответ

3

См http://openjdk.java.net/jeps/261#Packaging:-JMOD-files

JMOD файлы могут быть использованы во время компиляции и время компоновки, но не во время выполнения времени. Чтобы поддерживать их во время выполнения, в общем случае потребуется подготовить для извлечения и связывания библиотек родного кода на лету. Это возможно на большинстве платформ, хотя это может быть очень сложно, и у нас не видели много вариантов использования, требующих этой возможности, поэтому для простоты мы решили ограничить использование JMOD-файлов в этом выпуске .

+1

Это делает Jigsaw менее универсальным в Облаке, чем, например, OSGi. Надеюсь, что в конечном итоге он может быть рассмотрен, в противном случае по сравнению с OSGi и другими модульными системами Jigsaw рискует стать другим эквивалентом «java.util.logging», который является частью JDK, но использовал намного меньше, чем другие превосходные альтернативы. –

+0

Я думаю, что у Jigsaw есть другие цели, кроме OSGi. Основная цель - модуляция JDK, которая дает нам более быстрый запуск, меньшее потребление памяти и общую производительность. Для приложений он обеспечивает более чистое управление зависимостями и улучшенные правила видимости. – Lagrang

+2

Немного, но то, что я слышал о «автомодуле» и о том, как Jigsaw планирует переопределить это в META-INF/MANIFEST, я предполагаю, что это может быть синергетическим для JAR, которые должны работать как модули Java 9 и до этого (или кроме того) также как пакеты OSGi. Цели могут быть не одинаковыми, но в идеале вам нужно только один ОДИН JAR, а не два для отдельных систем модулей ;-) –

Смежные вопросы