Возможно, я не правильно понимаю, но я верю, что вам нужно выполнить вашу программу с другим файлом JAR (также) на вашем пути к классам.
Допустим, у вас есть ядро в A.jar и библиотека в B.jar. Вы можете выполнить вашу программу следующим образом (замените: на; в Windows):
java -cp A.jar:B.jar main.class.Name args
Где main.class.Name
- это имя вашего основного класса, а args
- это то, куда идут все аргументы командной строки.
Вы также можете поместить атрибут Main-Class
и Class-Path
в свой manifest.mf
, например:
Class-Path: B.jar
Main-Class: main.class.Name
Затем вы можете выполнить программу следующим образом:
java -jar A.jar args
Честно говоря, я привык думать, что это было просто - распространять мое приложение в виде одного файла JAR со всеми зависимостями, извлеченными и обернутыми в один гигантский файл JAR. Проблема в том, что некоторые приложения имеют довольно много зависимостей, и каждый раз, когда я вносил изменения в мой код, это также означало, что мне приходилось распространять весь зависимый код, даже если в зависимости изменились. Это означало распространение гигантских файлов JAR, даже если изменения были незначительными.
Используя атрибут манифеста Class-Path
, я могу распространять приложения, которые могут быть выполнены точно так же, как один файл JAR (двойной щелчок в некоторых системах или простое заклинание "java -jar
"), но сохранить тонна времени и пропускной способности, поскольку не переносятся все дубликаты библиотек с последующими выпусками программного обеспечения.
Также можно поместить любые зависимые JAR-файлы в их собственный каталог (на данный момент давайте назовем его lib
) и изменить Class-Path
так, чтобы все пути JAR выглядели как "lib/B.jar
". Тогда у вас не будет основного каталога программ, заполненного множеством крошечных JAR-файлов.