Може би не разбирам правилно, но вярвам, че това, което искате, е да изпълните програмата си с другия 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 файлове.
person
Adam Batkin
schedule
11.08.2009