Добавьте пользовательский JMOD в путь к модулю с Java 9
Я создал простой JMOD
файл с помощью инструмента jmod, как это
$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(java.base@9-ea/Resolver.java:729)
at java.lang.module.Resolver.resolveRequires(java.base@9-ea/Resolver.java:86)
at java.lang.module.Configuration.resolveRequiresAndUses(java.base@9-ea/Configuration.java:370)
at java.lang.module.ModuleDescriptor$1.resolveRequiresAndUses(java.base@9-ea/ModuleDescriptor.java:1986)
at jdk.internal.module.ModuleBootstrap.boot(java.base@9-ea/ModuleBootstrap.java:263)
at java.lang.System.initPhase2(java.base@9-ea/System.java:1928)
Если я просто установлю свой classes
каталог (который я использовал для создания файла JMOD) как modulepath, все работает как положено.
Разве это не возможно иметь JMOD
файлы на модульном пути? И если это так, есть ли причина для этого?
1 ответ
См. http://openjdk.java.net/jeps/261.
Файлы JMOD могут использоваться во время компиляции и во время компоновки, но не во время выполнения. Как правило, для их поддержки во время выполнения мы должны быть готовы извлекать и связывать библиотеки нативного кода на лету. Это выполнимо на большинстве платформ, хотя это может быть очень сложно, и мы не видели много вариантов использования, которые требуют этой возможности, поэтому для простоты мы решили ограничить полезность файлов JMOD в этом выпуске.