От моих чтений, когда Вы выполняете команду следующим образом:
java -jar foo.jar
Затем основной путь к классу проигнорирован, и путь к классу взят от файла манифеста.
Далее, путь к классу, объявленный на командной строке, также проигнорирован. Таким образом в:
java -classpath /usr/local/jar/foobar.jar -jar foo.jar
/usr/local/jar/foobar.jar проигнорирован.
Наконец, я считал, что файл манифеста может только содержать относительные пути в файле банки.
Так, как Вы включаете полные пути во внешние банки, которые присутствуют в системе, но не в выполняемом файле банки?
Есть ли причина, по которой вы избегаете вызова основного класса, например
java -cp /usr/local/jar/foobar.jar:/some/other/path.jar com.your.main.classname
?
Этот тип вызова позволяет смешивать абсолютные пути с относительными путями. Поместите это в сценарий оболочки или пакетный файл, чтобы не вводить или не запоминать полный путь к классам для упрощения.
Вы можете создать папку, например lib, в папке, в которой находится файл jar.
Содержимое Manifest.MF может быть:
Main-Class: com.mastergaurav.test.app.MainClass
Class-Path: lib/one.jar lib/two.jar
Содержимое папки:
mainFolder/
* lib/one.jar
* lib/two.jar
* my-main.jar
Для выполнения:
java -jar my-main.jar