Я думаю, это вопрос из двух частей. Я пытаюсь написать свою собственную задачу Ant (MyFirstTask
), которую можно использовать в файлах сборки build.xml
других проектов. Для этого мне нужно скомпилировать и упаковать мою задачу Ant в собственный JAR-файл. Поскольку эта задача Ant, которую я написал, довольно сложна, она имеет около 20 зависимостей (других файлов JAR), таких как использование XStream для OX-mapping, Guice для DI и т. д.
В настоящее время я пишу задачу package
в файле build.xml
внутри проекта MyFirstTask (файл сборки, который будет упаковывать myfirsttask.jar
, который является многократно используемой задачей Ant).
Я внезапно осознал, что не до конца понимаю назначение Java JAR. Дело в том, что JAR-файл не должен содержать зависимости и оставить его на усмотрение конфигурации времени выполнения (контейнера приложения, среды выполнения и т. д.), чтобы обеспечить его необходимыми зависимостями? Я бы предположил, что если это так, исполняемый JAR является исключением из правил, да?
Или это намерение, чтобы JAR-файлы Java также включали свои зависимости?
В любом случае, я не хочу заставлять своих пользователей копировать и вставлять более 25 JAR-файлов в свои библиотеки Ant; это просто жестоко. Мне нравится способ настройки файлов WAR, где путь к классам для зависимостей определяется в каталоге classes/
.
Думаю, в конечном итоге я бы хотел, чтобы моя структура JAR выглядела так:
myfirsttask.jar/
com/ --> the root package of my compiled binaries
config/ --> config files, XML, XSD, etc.
classes/ --> all dependencies, guice-3.0.jar, xstream-1.4.3.jar, etc.
META-INF/
MANIFEST.MF
Я предполагаю, что для того, чтобы выполнить это (и заставить путь к классам среды выполнения также заглядывать в каталог classes/
), мне нужно каким-то образом изменить MANIFEST.MF (я знаю, что есть атрибут манифеста с именем ClassPath
, Я считаю?). Мне просто трудно собрать все вместе, и у меня есть вырисовывающийся / затянувшийся вопрос о самом назначении JAR с самого начала.
Может ли кто-нибудь подтвердить, намерен ли Oracle, чтобы JAR-файлы содержали свои зависимости или нет? И в любом случае, что мне нужно сделать в манифесте (или где-либо еще), чтобы убедиться, что во время выполнения путь к классам может найти зависимости, хранящиеся в каталоге classes/
? Заранее спасибо!
script
. - person Jarekczek   schedule 30.09.2012