Разделение зависимостей Gradle между путем к модулю Java 9 и путем к классам: автоматические модули
Я следовал руководству Gradle по созданию модулей Java 9, чтобы получить простой библиотечный проект на основе Java 9 с нуля. В частности, я следовал совету в руководстве, чтобы вручную установить путь к модулю следующим образом:
ext.moduleName = 'com.foo.bar'
compileJava {
inputs.property("moduleName", moduleName)
doFirst {
options.compilerArgs = [
'--module-path', classpath.asPath,
]
classpath = files()
}
}
Заметьте, что это просто взятие всего моего пути к классам, как определено Gradle из моего графика зависимостей, и перенос его на путь модуля.
Все прекрасно работает, за исключением одной простой проблемы. Некоторые из моих зависимостей (например, org.jetbrains.kotlin:kotlin-stdlib-1.2.10
) не являются настоящими модулями Java 9, так как им не хватает module-info.class
, Хорошо прикрепить их к пути к классам или модулям, потому что покаjava
превратит их в так называемые автоматические модули.
Проблема возникает потому, что даже для автоматического модуля, если он находится на пути моего модуля, мне нужно обратиться к нему в requires
директива в модулях моего проекта. Но потому что я катаюсь с -Xlint:all
вариант для компилятора Java, javac
генерирует следующее предупреждение:
/path/to/myproject/foo-module/src/main/java/module-info.java:26: warning: requires directive for an automatic module
requires kotlin.stdlib;
^
Это предупреждение для меня несостоятельно, потому что я тоже -Werror
javac
флаг, так что моя сборка не удалась.
Так что, похоже, мне нужно поместить автоматические модули в мой путь к классам и сохранить только "истинные" зависимости модуля от пути к модулю...
Есть ли какой-либо общий или полуградиционный способ (то есть, который не связан с именами зависимостей) разделить мои зависимости между путем к классам компилятора и путем к его модулю?