Я не буду отвечать прямо на вопрос, так как другие уже делали это раньше, но мне действительно интересно, стоит ли встраивать все зависимости в сам файл проекта.
Я вижу смысл (простота развертывания / использования), но это зависит от варианта использования вашего объекта (и могут быть альтернативы (см. Ниже)).
Если вы используете его полностью автономно, почему бы и нет.
Но если вы используете свой проект в других контекстах (например, в веб-приложении или помещены в папку, где находятся другие банки), у вас могут быть дубликаты jar в вашем пути к классам (те, что в папке, те, что в банках). ). Может быть, это не предложение цены, но я обычно избегаю этого.
Хорошая альтернатива:
- разверните ваше приложение как .zip / .war: архив содержит jar вашего проекта и все зависимые jar;
- использовать механизм динамического загрузчика классов (см. Spring, или вы можете легко сделать это самостоятельно), чтобы иметь единственную точку входа в ваш проект (один класс для запуска - см. Механизм манифеста в другом ответе), который добавит (динамически ) к текущему classpath все остальные необходимые банки.
Подобным образом, имея в конце всего лишь манифест и «специальный динамический основной загрузчик классов», вы можете начать свой проект с:
java -jar ProjectMainJar.jar com.stackoverflow.projectName.MainDynamicClassLoaderClass