Ответ 1
Неа.
Документация
Интересно, что ни Состояние модульной системы, ни Jigsaw Краткое руководство. Один из источников (найденный Andy) - это разговор JavaOne от Alex Buckley (см. Его объяснение здесь). Более поздним является список открытых проблем, в котором явно упоминается циклические зависимости:
Текущий проект запрещает циклы, когда граф модуля первоначально разрешен во время компиляции, времени соединения и времени выполнения. Циклы могут возникать позже во время выполнения, если для автоматических модулей добавляются четкости считывания или через отражение. [...] Это ограничение не является документированным требованием [...].
Оправдание
Циклические зависимости плохие, mkay.;)
Они появляются, когда два сущности (методы, классы, модули, проекты,...) сотрудничают, но недостаточно развязаны. Для пользователей, а также для сопровождающих, это соединение означает, что они не могут использовать или улучшать один, не учитывая другого. Но это именно то, к чему стремится модуляция.
Из списка проблем, связанного выше:
Обоснование запрета циклов во время разрешения состоит в том, что он упрощает рассуждение о модульном графе, он упрощает сама модульную систему и, что философски, любые модули, участвующие в цикле, логически являются одним модулем, так что они должны быть определяемые как таковые в первую очередь.
Экспериментирование
Я создал небольшой демонстрационный проект на GitHub, который содержит два цикла ( пара: два → один → два; тройной: три → два → один → три). Попытка мультимодульная компиляция, как показано в кратком руководстве по началу работы, это следующие результаты:
./compile.sh
> creating clean directories
> compiling and packaging cycle "pair"
src/org.codefx.demo.cyclic.pair.one/module-info.java:2: error: cyclic dependence involving org.codefx.demo.cyclic.pair.two
requires org.codefx.demo.cyclic.pair.two;
^
1 error
> compiling and packaging cycle "triple"
src/org.codefx.demo.cyclic.triple.three/module-info.java:2: error: cyclic dependence involving org.codefx.demo.cyclic.triple.two
requires org.codefx.demo.cyclic.triple.two;
^
1 error
Поэтому вы даже не можете скомпилировать модули, не говоря уже о том, чтобы использовать их в конфигурации.