Когда разрабатывается относительно небольшое десктопное приложение на Java, частенько возникает вполне, на мой взгляд, естественное желание запихать все классы, библиотеки и ресурсы в один исполняемый JAR-файл. В некоторых случаях именно такое решение является предпочтительным.
В Eclipse IDE это можно сделать очень легко и, кроме того, автоматизировать это действие, чтобы в дальнейшем делать сборку JAR одной кнопкой.
В окне выбираем Java -> Runnable JAR и жмём Next
Теперь настраиваем параметры создания JAR:
При создании JAR, автоматом также будет создан файл MANIFEST.MF с правильными Class-Path и Main-Class, поэтому ваш архив можно будет запустить простой командой java -jar application.jar.
Если вы решите упаковывать все библиотеки в один JAR вместе с вашими классами, убедитесь, что лицензии библиотек это разрешают.
В свойствах проекта (Project -> Properties) есть раздел Builders, в котором вы можете создавать дополнительные билдеры и в частности таким билдером может быть Ant, которому вы и подсовываете этот файл. После этого при каждом запуске проекта (Ctrl + F11), JAR будет собираться автоматически, если были изменения в исходном коде.
Такой вариант постоянной сборки JAR не особо удобен, т.к. может занимать некомфортное по продолжительности время. Вместо этого можно создать этот билдер в External Tools (Run -> External Tools -> External Tools Configurations) и запускать сборку JAR только, когда вам это действительно нужно.
При использовании такого подхода, можно получать доступ как к незапакованным файлам ресурсов, так и к тем, которые запакованы в JAR вместе с классами.
В Eclipse IDE это можно сделать очень легко и, кроме того, автоматизировать это действие, чтобы в дальнейшем делать сборку JAR одной кнопкой.
Сборка
Кликаем правой кнопкой по проекту, который надо упаковать в исполняемый JAR и нажимаем Export.В окне выбираем Java -> Runnable JAR и жмём Next
Теперь настраиваем параметры создания JAR:
- Конфигурация запуска (Launch configuration или Run configuration), которая отвечает за запуск проекта. Из неё во время сборки будет взята информация о Main class, CLASSPATH и всех необходимых библиотеках
- Имя создаваемого JAR-файла
- Далее надо указать, как следует поступить с подключенными библиотеками:
- Распаковать содержимое библиотек и запаковать и вместе с вашими классами и ресурсами в один JAR
- Не распаковывая положить все библиотеки в создаваемый JAR. В дополнение к этому Eclipse положит в build-катлог файл jar-in-jar-loader.zip, который содержит классы, позволяющие использовать эти "дважды упакованные" библиотеки вашему приложению (Classloader). Эти классы будут также упакованы в ваш JAR и, следовательно, для его выполнения после окончательной сборки архив jar-in-jar-loader.zip не нужен. Однако, для того чтобы можно было автоматизировать такую сборку, этот архив обязательно должен быть в build-каталоге, поэтому после первой "кнопочно-окошечной" сборки его удалять не стоит
- Положить все необходимые библиотеки в каталог рядом с созданным JAR'ом
- Можно указать где сохранить сгенерированный Ant-скрипт для этой сборки. В дальнейшем его можно будет использовать для автоматизации процесса создания исполняемого JAR-файла из проекта
При создании JAR, автоматом также будет создан файл MANIFEST.MF с правильными Class-Path и Main-Class, поэтому ваш архив можно будет запустить простой командой java -jar application.jar.
Если вы решите упаковывать все библиотеки в один JAR вместе с вашими классами, убедитесь, что лицензии библиотек это разрешают.
Автоматизация сборки
Как было сказано ранее, при создании JAR с помощью Eclipse, вы можете сохранить сгенерированный скрипт Ant, содержащий все необходимые действия.В свойствах проекта (Project -> Properties) есть раздел Builders, в котором вы можете создавать дополнительные билдеры и в частности таким билдером может быть Ant, которому вы и подсовываете этот файл. После этого при каждом запуске проекта (Ctrl + F11), JAR будет собираться автоматически, если были изменения в исходном коде.
Такой вариант постоянной сборки JAR не особо удобен, т.к. может занимать некомфортное по продолжительности время. Вместо этого можно создать этот билдер в External Tools (Run -> External Tools -> External Tools Configurations) и запускать сборку JAR только, когда вам это действительно нужно.
Ну и, конечно же, никто не запрещает вам добавлять свои собственные цели и задачи в этот Ant-скрипт. Подробнее об Ant'е я писал тут.
Ресурсы
Кроме скомпилированных классов, в JAR также можно хранить и другие ресурсы приложения, например, текстовые файлы или картинки. Для этого нужно поместить ресурсы в пакет (или субпакет) с каким-нибудь классом и использовать методы Class.getResource(String name) или Class.getResourceAsStream(String name) для доступа к ресурсу. Параметр name это имя файла ресурса относительно каталога (пакета), в котором лежит класс.Пример
У вас есть класс MyApp.class, который находится в пакете my.application. Вы можете поместить файлы изображений например в my.application.images и обращаться к ним из класса MyApp примерно так:URL url = getClass().getResource("images/my_picture.png"); Image image = Toolkit.getDefaultToolkit().getImage(url);Или из любого другого класса:
URL url = MyApp.class.getResource("images/my_picture.png"); Image image = Toolkit.getDefaultToolkit().getImage(url);
При использовании такого подхода, можно получать доступ как к незапакованным файлам ресурсов, так и к тем, которые запакованы в JAR вместе с классами.
Комментариев нет:
Отправить комментарий