SWT: обеспечить мультиплатформенные пакеты загрузки - PullRequest
2 голосов
/ 14 октября 2011

Для нашего приложения SWT я хочу предоставить общий пакет загрузки Linux, который может запускаться как на 32-битных, так и на 64-битных виртуальных машинах.В настоящее время мы определяем путь к классам, используя манифест, и запускаем приложение, используя java -jar main.jar.Путь к классу манифеста содержит несколько swt * .jars, и выбирается первый соответствующий (без проблем, потому что в настоящее время для каждой платформы распространяется только один).

Просто поставляем обе библиотеки SWT, swt-linux-32.jar и swt-linux-64.jarвыглядит не очень многообещающе, потому что тогда либо пользователю придется вручную удалить неправильный файл, либо сценарию придется динамически (страшно!) настроить весь путь к классу приложения.

Я думал о предоставлении двухскрипты запуска, один для 32-битных виртуальных машин, а другой для 64-битных виртуальных машин, удаляющий swt.jars из пути к классам манифеста и явно добавляющий правильный к пути к классам, например, java -cp swt-linux-64.jar -jar main.jar.К сожалению, похоже, что нельзя смешивать явное определение пути к классу (-cp) с неявным (-jar).

Еще одним решением может быть явное задание classpathes в сценариях запуска, но это будетусложнить ведение сценариев.

Конечно, у меня была бы альтернатива для динамической загрузки правильного файла swt.jar в приложение, но я бы предпочел не указывать разные имена файлов в коде Java..

Есть ли у кого-нибудь еще лучшее предложение, как мы можем справиться с этим?

1 Ответ

0 голосов
/ 14 октября 2011

Легко: делать динамические манипуляции с загрузчиком классов.Иметь JAR загрузчика, который устанавливает новый URLClassLoader в зависимости от 32/64-битного типа среды выполнения, а затем загрузить оттуда ваш основной класс - затем вызвать метод main.

...