Как лучше всего включать сторонние jar-файлы в Java-программу? - PullRequest
7 голосов
/ 13 марта 2010

У меня есть программа, которой нужно несколько сторонних библиотек, и на данный момент она упакована так:

zerobot.jar (my file)
libs/pircbot.jar
libs/mysql-connector-java-5.1.10-bin.jar
libs/c3p0-0.9.1.2.jar

Насколько я знаю, «лучший» способ работы со сторонними библиотеками - это поместить их в classpath в манифесте моего jar-файла, который будет работать кроссплатформенно, не будет замедлять запуск они могут) и не сталкиваются с юридическими проблемами (которые могут перепаковывать).

Проблема для пользователей, которые сами поставляют сторонние библиотеки (пример использования, обновление для исправления ошибки). У двух из библиотек есть номер версии в файле, который добавляет хлопот.

Мое текущее решение состоит в том, что моя программа имеет процесс начальной загрузки, который создает новый загрузчик классов и создает экземпляр программы, правильно использующей его. Этот пользовательский загрузчик классов добавляет все файлы .jar из lib / в свой путь к классам.

Мой текущий способ работает нормально, но у меня теперь есть два пользовательских загрузчика классов в моем приложении, и недавнее изменение в коде вызвало проблемы, которые трудно отладить, поэтому, если есть лучший способ, я бы хотел устранить эту сложность , Это также похоже на чрезмерную инженерию, потому что я уверен, что это очень распространенная ситуация.

Итак, мой вопрос: как мне это сделать?

Ответы [ 4 ]

5 голосов
/ 13 марта 2010

Предоставляем файлы скриптов с банкой. Например. some.bat, some.sh и т. д.

А с Java6 вы можете использовать подстановочный знак для указания путей к классам.

Вот хорошая статья, которая объясняет этот подход: https://blogs.oracle.com/mr/entry/class_path_wildcards_in_mustang

1 голос
/ 15 марта 2010

Если ваша аудитория техническая (и, похоже, они готовы добавить новые файлы jar), возможно, вы могли бы предоставить файлы .sh и .bat, которые они могут редактировать, чтобы изменить путь к классам? Это будет более прозрачным для них, чем пользовательский загрузчик классов.

0 голосов
/ 14 марта 2010

Я думаю, что собираюсь пойти по пути манифеста.Объявите classpath в манифесте для jar-записи и получите записи для:

libs/pircbot.jar
libs/mysql-connector-java-5-bin.jar
libs/c3p0.jar

Затем, если пользователи захотят перейти на последние версии библиотеки, им придется переименовать их в соответствии с тем, что объявленоманифест.Я не думаю, что это слишком много хлопот, и это внутренне упрощает ситуацию.

Мне также просто не нравится идея автоматически загружать все в ./lib/, что кажется потенциально опасным.

0 голосов
/ 13 марта 2010

Вы можете попробовать решение Fat-Jar, оно прекрасно работает с ' Fat Jar Eclipse Plug-In '. Я использовал для нескольких проектов без проблем на всех. Принцип этого, похоже, совпадает с вашим текущим решением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...