Как определить квалифицированный экспорт в неизвестные модули? - PullRequest
0 голосов
/ 07 декабря 2018

У меня есть проект Maven с двумя модулями Maven A и B.A содержит следующее определение модуля Java:

module A {
    exports internal.util to B;
    exports external.A;
}

B содержит следующее определение модуля Java:

module B {
    requires A;

    exports external.B;
}

Когда я собираю проект, я получаю сообщение об ошибке:

[WARNING] module-info.java:[16,106] module not found: B

Модуль B существует, но поскольку модуль A скомпилирован до B и не зависит от него, компилятор не может этого знать.Поскольку я настроил компилятор для обработки предупреждений как ошибок (-Werror), сборка завершается неудачей.

Поскольку я хочу продолжать рассматривать предупреждения как ошибки, каков наилучший способ решения этой проблемы?

  • Есть ли способ намекнуть компилятору, что этот модуль будет объявлен в будущем?
  • Есть ли способ подавить все предупреждения этого типа?

Ответы [ 2 ]

0 голосов
/ 07 декабря 2018

Я нашел обходной путь, просмотрев исходный код JDK 11: -Xlint:-module.Я все еще открыт для лучшего решения, если кто-то найдет его.

ОБНОВЛЕНИЕ : Альтернативой является использование --module-source-path, как продемонстрировано https://stackoverflow.com/a/53717183/14731

Спасибо, АланБейтман за указание мне в этом направлении!

0 голосов
/ 07 декабря 2018

Как я понял из этого вопроса, ваш сценарий таков, что оба модуля A и B сосуществуют, а модуль A не зависит от модуля B.

С точки зрения модульной системы, поскольку A делает квалифицированный экспорт в модуль B, выдается предупреждение, если модуль B имеет значение , но не разрешен на пути модуля , покавы строите A.

В IntelliJ-IDEA я мог бы решить эту проблему, добавив зависимость модуля B к модулю A без каких-либо изменений объявления.Хотя, используя платформу Maven, я не мог представить здесь что-либо без циклической зависимости, может быть, предложение от khmarbaise могло бы помочь.

Примечание : Альтернативный способ исправить это также может быть отключение таких предупреждений с помощью командной строки arg:

-Xlint: -exports

или как Алан указывает на исправление

-Xlint:-module

Мысли вслух: предупреждение является результатом квалифицированного экспорта, но о модуле не найден.

Полезно : подробности по этим аргументам командной строки можно найти с помощью команды javac.

...