Тебе надо обязательно прочитать что такое
манифест
https://docs.oracle.com/javase/tutorial/deployment...
Большинство ответов на твои вопросы лежит там. Существуют разные методики упаковки
приложения в jar-артифакт. Можно делать зависимости внешними. А можно создавать
так называемый
fat-jar (толстый jar) куда будут перепакованы все внешние зависимости.
Shade plugin, jar plugin и еще много плагинов этим занимаются для maven сборщиков.
Почитай еще что такое Java9 modules. Это тоже полезно.