Ответ 1
время выполнения полезно для зависимостей, необходимых для модульных тестов и во время выполнения, но не во время компиляции. Обычно это может быть динамически загруженный код, такой как JDBC-драйверы, на которые прямо не ссылаются программный код.
Установление зависимости от времени выполнения гарантирует, что не существует случайной зависимости от кода, а также задерживает зависимость от транзитивности. Так, например, если модуль A имеет зависимость от времени выполнения от библиотеки X, а модуль B зависит от модуля A, он не наследует зависимость от библиотеки X. Использование "предоставлено" или "компиляция" приведет к тому, что B будет зависеть от X.