Ответ 1
Модульная система запрещает статически объявлять циклы с предложениями requires
. Это верно для модулей платформы и приложений, и приведенный вами пример не нарушает это правило.
Требуется, чтобы клаузулы были всего лишь одним источником для граней читаемости в графе модулей. Другие - флаги командной строки, отражение, requires transitive
, и я уверен, что их больше. Добавление всего этого может привести к циклам в графе модулей, и это не запрещено.
В вашем конкретном примере цикл создается только после того, как java.base читает java.rmi, что может произойти, если оно использует отражение в классах в com.sun.rmi.rmid
.