У вас там какой-то беспорядок POM, и вы строите две банки.
Один из jar-файлов создается путем первого копирования ваших зависимостей в target/classes/lib
- сомнительная практика для начала - и позволяющий выполнению плагина jar по умолчанию создать свой обычный jar-файл. Этот jar содержит весь ваш код, как обычный jar, но также содержит все ваши jar зависимостей внутри /lib
. Он также имеет манифест, который задает Main-Class
и Class-Path
, перечисляя все необходимые банки в относительном пути lib/...jar
. Похоже, это тот, кого вы пытаетесь запустить. Причина, по которой он не может найти нужные ему классы, заключается в том, что путь к классу для автономного приложения Java представляет собой список папок или файлов JAR в файловой системе, которые содержат файлы классов. Другими словами, он не найдет файлы JAR внутри другого файла JAR, что и есть у вас. Чтобы это работало так, как вы ожидаете, вам понадобится каталог lib
рядом с вашим JAR-файлом, в котором есть все зависимости. Это то, что вызывает вашу настоящую проблему.
Другой jar создан плагином сборки. Из-за ваших более ранних выходок с плагином зависимостей, этот должен также содержать все jar зависимостей в /lib
, что, как я уже объяснил, ничего не даст, но из-за того, как работает дескриптор jar-with-dependencies
, он также извлечет все эти банки и поместит все их классы в вашу банку вместе с вашими собственными классами. Если бы вы запустили этот jar-файл, вы, вероятно, миновали бы исключение ClassNotFoundException, но есть такие хорошо известные проблемы с «толстыми банками», как это, которые означают, что вы не должны этого делать, если у вас нет действительно веских причин для этого. Одна такая проблема описана в следующем вопросе:
Maven и Spring = Невозможно создать контекст приложения: невозможно найти Spring NamespaceHandler