Компилятору нужен правильный путь к классу для компиляции вызовов в библиотеку (зависимости времени компиляции)
JVM нужен правильный путь к классу для загрузки классов в библиотеке, которую вы вызываете (зависимости времени выполнения).
Они могут отличаться несколькими способами:
1) если ваш класс C1 вызывает библиотечный класс L1, а L1 вызывает библиотечный класс L2, то C1 имеет зависимость времени выполнения от L1 иL2, но только зависимость времени компиляции от L1.
2), если ваш класс C1 динамически создает интерфейс I1, используя Class.forName () или какой-то другой механизм, и реализующий класс для интерфейса I1 - это класс L1,тогда C1 имеет зависимость времени выполнения от I1 и L1, но только зависимость времени компиляции от I1.
Другие «косвенные» зависимости, которые одинаковы для времени компиляции и времени выполнения:
3) ваш класс C1 расширяет библиотечный класс L1, а L1 реализует интерфейс I1 и расширяет библиотечный класс L2: C1 зависит от времени компиляции от L1, L2 и I1.
4) у вашего класса C1 есть метод foo(I1 i1)
и метод bar(L1 l1)
, где I1 - это интерфейс, а L1 - это класс, который принимает параметр, который является интерфейсом I1: C1 имеет зависимость времени компиляции от I1и L1.
По сути, чтобы сделать что-нибудь интересное, ваш класс должен взаимодействовать с другими классами и интерфейсами в пути к классам.Граф классов / интерфейсов, сформированный этим набором библиотек interfaces , дает цепочку зависимостей времени компиляции.Библиотека реализаций дает цепочку зависимостей во время выполнения. Обратите внимание, что цепочка зависимостей во время выполнения зависит от времени выполнения или медленна при сбое: если реализация L1 иногда зависит от создания экземпляра объектакласс L2, и этот класс создается только в одном конкретном сценарии, тогда нет никакой зависимости, кроме как в этом сценарии.