У меня есть программа, для которой нужны несколько сторонних библиотек, и в данный момент она упаковывается как так:
zerobot.jar (my file) libs/pircbot.jar libs/mysql-connector-java-5.1.10-bin.jar libs/c3p0-0.9.1.2.jar
Насколько я знаю, что "лучший" способ обработать третье лицо освобождает, должен поместить их на путь к классу в декларации моего файла банки, который будет работать межплатформенный, не замедлит запуск (какое связывание их могло бы) и не сталкиваться с юридическими вопросами (какая переупаковка могла бы).
Проблема для пользователей, которые предоставляют сами сторонние библиотеки (вариант использования в качестве примера, обновляя их для исправления ошибки). Две из библиотек имеют номер версии в файле, который добавляет стычку.
Мое текущее решение состоит в том, что моя программа имеет процесс начальной загрузки, который делает новый classloader и инстанцирует программы надлежащее использование ее. Этот пользовательский classloader добавляет все .jar файлы в lib / к его пути к классу.
Мой текущий путь хорошо работает, но у меня теперь есть два пользовательских classloaders в моем приложении, и недавнее изменение в коде вызвало проблемы, которые трудно отладить, поэтому если бы существует лучший способ, которым я хотел бы удалить эту сложность. На сверхразработку для того, также походит, что я уверен, очень общая ситуация.
Таким образом, мой вопрос, как я должен делать это?
Мы предоставляем файлы сценариев вместе с jar. Например. some.bat, some.sh и т. д.
И, начиная с Java6, вы можете использовать подстановочные знаки для указания путей к классам.
Вот хорошая статья, объясняющая этот подход: https://blogs.oracle.com/mr/entry/class_path_wildcards_in_mustang
Думаю, я собираюсь пойти по пути манифеста. Объявите путь к классам в манифесте для jar-файла и укажите записи для:
libs/pircbot.jar libs/mysql-connector-java-5-bin.jar libs/c3p0.jar
Затем, если пользователи захотят обновить библиотеку до последних версий, им придется переименовать их, чтобы они соответствовали тому, что объявлено в манифесте. Я не думаю, что это слишком большая проблема, и это значительно упрощает внутреннюю работу.
Мне также вообще не нравится идея автоматически загружать все в ./lib/, что кажется потенциально опасным.
Если ваша аудитория техническая (и похоже, что да, если они хотят добавить новые файлы jar), то, возможно, вы могли бы предоставить файлы .sh и .bat, которые они могут редактировать, чтобы изменить путь к классам? Для них это будет более прозрачно, чем пользовательский загрузчик классов.
Вы можете попробовать решение Fat-Jar, оно отлично работает с ' Fat Jar Eclipse Plug-In '. Я использовал для нескольких проектов без каких-либо проблем. Принцип этого, похоже, тот же, что и у вашего текущего решения.