Можно ли импортировать две банки с одинаковыми пакетами?
Я перевожу проект с Java 8 на Java 11, и модульность, представленная в java 9, доставляет мне головную боль. Пара баночек имеет одинаковые пакеты, но разных классов. Это дает мне ошибку
module SomeModule reads package my.package from both ModuleA and ModuleB
Интересно, как поступить с такими случаями, учитывая, что не все банки находятся под моим контролем, рефакторинг не является решением.
1 ответ
Один из способов - убедиться, что оба этих сосуда classpath
в Безымянном модуле. Но обратите внимание, что
Безымянный модуль экспортирует все свои пакеты. Это обеспечивает гибкую миграцию... Однако это не означает, что код в названном модуле может обращаться к типам в неназванном модуле.
Именованный модуль не может даже объявить зависимость от неназванного модуля. Это ограничение является преднамеренным, поскольку разрешение именованных модулей зависеть от произвольного содержимого пути класса сделало бы невозможной надежную конфигурацию.
Конечно, идеальным решением было бы выполнить миграцию снизу вверх и убедиться, что никакие два модуля не предоставляют один и тот же пакет модулю, который requires
оба из них.