Разделение зависимостей 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;
                   ^

Это предупреждение для меня несостоятельно, потому что я тоже -Werrorjavac флаг, так что моя сборка не удалась.

Так что, похоже, мне нужно поместить автоматические модули в мой путь к классам и сохранить только "истинные" зависимости модуля от пути к модулю...

Есть ли какой-либо общий или полуградиционный способ (то есть, который не связан с именами зависимостей) разделить мои зависимости между путем к классам компилятора и путем к его модулю?

0 ответов

Другие вопросы по тегам