Так что я относительно новичок в Java EE, и мне трудно понять, когда, где и почему файлы развертывания Java упакованы со своими зависимостями.
Скажем, я строю свой проект в myapp.jar , и это зависит от fizz.jar, buzz.jar и JODA (joda-time-2.0.jar
).
Я слышал, что загрузчик классов по умолчанию не упаковывает jar-файлы внутри других jar-файлов, поэтому я должен предположить, что если бы я вызвал задачу jar из Ant, то загрузчик классов по умолчанию будет вызван и myapp.jar будет создан без этих 3-х зависимостей.
Это потому, что менталитет заключается в развертывании jar-файлов без 1014 * в контейнерах или других системах, которые будут обеспечивать его требования во время выполнения? Если нет, то как myapp.jar работает правильно?
А как насчет исполняемых фляг? Чтобы встретиться, эти должны отличаться от main
без банок, потому что они предназначены, чтобы быть отдельными единицами, верно? Это значит, что им понадобятся все их зависимости, не так ли?
И последнее, но не менее важное: как насчет банок, которые зависят от банок, которые зависят от банок ... и т. Д. (т. е. огромные зависимости)?
Полагаю, все эти вопросы можно сформулировать следующим образом:
- Является ли идея неисполняемого jar-файла в том, что он будет запускаться таким образом, что он будет знать, какой путь-класс (ы) искать его зависимости во время выполнения? (И поэтому не нужно упаковывать его с зависимостями)?
- Есть ли идея исполняемого файла jar в том, что он является автономным модулем и должен быть упакован с его зависимостями?
- Если мое утверждение к вопросу № 1 выше верное, как происходит такая конфигурация пути к классам? Эти параметры хранятся внутри банки (например, в манифесте)? Иначе, как JRE узнает, где искать конкретные зависимости jars во время выполнения?
Ответы на эти вопросы на самом деле прояснят довольно много ошибок, которые я имею с основами Java, и поэтому любой ввод / помощь здесь будет оценена чрезвычайно! Спасибо