Разница между конфигурациями компиляции и времени выполнения в Gradle

102

Мой вопрос немного распространен, но он тоже связан с Gradle.

Зачем нам нужна конфигурация компиляции и времени выполнения?

Когда я компилирую что-то, мне нужны артефакты для преобразования моих классов java в байт-код, поэтому мне нужна конфигурация компиляции, но зачем нужна конфигурация времени выполнения, мне нужно что-то еще для запуска моего приложения в JVM?

Извините, если это звучит глупо, но я не понимаю.

Кселианский
источник

Ответы:

149

В наиболее распространенном случае артефакты, необходимые во время компиляции, являются подмножеством артефактов, необходимых во время выполнения. Например, предположим, что программа с именем appиспользует библиотеку foo, а foo внутренняя библиотека использует библиотеку bar. Затем fooтребуется только компиляция app, но для ее запуска необходимы оба fooи bar. Вот почему по умолчанию все, что вы помещаете в compileконфигурацию Gradle, также отображается в его runtimeконфигурации, но обратное неверно.

Питер Нидервизер
источник
20
Жаль, что это не упоминается явно в gradle.org/docs/current/userguide/dependency_management.html . Они используют и компиляцию, и среду выполнения, не указывая явно их значение ...
silasdavis
2
@silasdavis В документации объясняется разница: gradle.org/docs/current/userguide/… в 8.3. Конфигурации зависимостей
angelcervera
@angelcervera А, так и есть, 8. Основы управления зависимостями и 51. Управление зависимостями. Я понимаю, почему у них два раздела, но, возможно, было бы неплохо, если бы последний ссылался на первый. Думаю, я приземлился на 51 и ожидал, что он даст полную картину.
silasdavis
@silasdavis Верно. То же и для других разделов документации. У меня должно быть такое же свободное время, чтобы прочитать всю документацию от А до Я.
angelcervera
1
@Peter Niederwieser Если задача компиляции показывает те же зависимости, что и среда выполнения, в каком сценарии вы бы использовали среду выполнения вместо компиляции?
rj2700