Ваш файл jar имеет следующую структуру файлов:
![file structure](https://i.stack.imgur.com/JOxAp.jpg)
Вы настраиваете следующие загрузчики классов:
- Основной загрузчик классов
Основной загрузчик классов имеет все следующие данные в своем пути к классам:
- Ваши классы приложений
- Баночка-in-jar classloader
Загрузчик классов SWT создается во время выполнения и имеет следующий путь к классам:
- Классы SWT для вашей платформы
Ваш код загрузки просит загрузчик классов SWT загрузить класс SWT, и это работает.Однако затем вы просите его загрузить класс приложения.Он не знает о вашем классе приложения, поэтому делегирует его родителю, главному загрузчику классов.Это позволяет загрузить ваш класс приложения, который затем пытается ссылаться на класс SWT.Эта ссылка обрабатывается загрузчиком классов, который загрузил класс вашего приложения - основным загрузчиком классов.Он не знает о классе SWT и выдает исключение.
Вам необходимо упаковать приложение по-другому.Вам необходимо иметь следующие загрузчики классов.
- Главный загрузчик классов
Главный загрузчик классов имеет все следующиена своем пути к классам:
- Один класс приложения, который обрабатывает создание загрузчика классов SWT
- Загрузчик классов jar-in-jar
Создан загрузчик классов SWTво время выполнения и имеет следующие значения:
- Классы SWT для вашей платформы
- Классы вашего приложения
Это означает, что при загрузкеКласс приложения будет загружен загрузчиком классов SWT.Это означает, что, когда ваше приложение ссылается на классы SWT, используется правильный загрузчик классов.
Для рабочего примера этого вы можете скачать и проверить следующий jar: https://github.com/downloads/mchr3k/org.intrace/intrace-ui.jar
РЕДАКТИРОВАТЬ:Файл сборки муравья, который создал intrace-ui.jar, можно увидеть здесь: https://github.com/mchr3k/org.intrace/blob/master/org.intrace/build.xml
В частности, цель "jar" обрабатывает упаковку.