Ну, после нескольких дней экспериментов я придумаю ответ - да, возможно использовать Groovy с модулями Project Jigsaw.
Но это требует дополнительных усилий.
Допустим, у нас есть следующая структура файла:
├── build
├── jigsaw
│ └── module
│ └── test
│ └── Application.groovy
├── lib
│ └── groovy.all.jar
└── module-info.java
module-info.java
module main {
requires groovy.all;
}
Application.groovy
package jigsaw.module.test
class Application {
static void main(String[] args) {
println "Hello module!"
}
}
Прежде всего нам нужно скомпилировать файл module-info.java с помощью javac вместо компиляции всех файлов с помощью groovyc, потому что groovy рассматривает файл модуля как закрытие.
Давайте сделаем это:
javac -d build --module-path lib/ module-info.java
- путь к модулю будет включать наш groovy.all.jar в качестве автоматического модуля с именем, полученным из имени JAR-файла.
Далее нам нужно скомпилировать Application.groovy
groovyc -d build jigsaw/module/test/Application.groovy
Идет гладко.
После компиляции у нас есть module-info.class (он же дескриптор модуля) и Application.class .
├── build
│ ├── jigsaw
│ │ └── module
│ │ └── test
│ │ └── Application.class
│ └── module-info.class
├── jigsaw
│ └── module
│ └── test
│ └── Application.groovy
├── lib
│ └── groovy.all.jar
└── module-info.java
Теперь давайте попробуем запустить наш скомпилированный модуль.
java --module-path build:lib --module main/jigsaw.module.test.Application
И вот что мы получаем
Error occurred during initialization of boot layer
java.lang.module.FindException: Unable to derive module descriptor for lib/groovy.all.jar
Caused by: java.lang.module.InvalidModuleDescriptorException: Provider class moduleName=groovy-all not in module
А что это значит? Я не знаю. После долгих поисков я обнаружил что-то похожее .
Так что нам нужно вручную удалить из JAR эти файлы:
- / META-INF / услуги / org.codehaus.groovy.source.Extensions
- / META-INF / услуги / org.codehaus.groovy.runtime.ExtensionModule
Наконец, наш модуль Java может запускаться
java --module-path build:lib --module main/jigsaw.module.test.Application
Hello module!
Все манипуляции выполнялись с использованием Oracle JDK 10 и Groovy 2.4.15.