Возможно, я неправильно понимаю, но я считаю, что вы хотите выполнить свою программу с другим 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
»), но сэкономить массу времени и полосы пропускания, не передавая все дубликаты библиотек с последующими выпусками программного обеспечения.
Также можно поставить любые зависимые JARs в отдельный каталог (назовем его lib
сейчас) и модифицировать Class-Path
так, что все пути JAR похожи на «lib/B.jar
». Тогда вы не получите свой основной программный каталог, полный многих крошечных файлов JAR.
Вы хотите сказать, что у вас есть кувшин, содержащий другие банки? Или что вы хотите включить в свою банку зависшие банки? в чем именно проблема?: – djna
Я обновил вопрос :) –