Цель компиляции должна быть добавлена перед сборкой: одиночный или иной код вашего собственного проекта не включен.
Смотрите больше деталей в комментариях.
Обычно эта цель привязана к этапу сборки для автоматического выполнения. Это гарантирует, что JAR будет собран при выполнении mvn install или выполнении развертывания / выпуска.
<build> <plugins> <plugin> <artifactId>maven-assembly-plugin</artifactId> <configuration> <archive> <manifest> <mainClass>fully.qualified.MainClass</mainClass> </manifest> </archive> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> </configuration> <executions> <execution> <id>make-assembly</id><!-- this is used for inheritance merges --> <phase>package</phase><!-- bind to the packaging phase --> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
Ответ 2
Вы можете использовать плагин зависимостей для создания всех зависимостей в отдельном каталоге перед этапом упаковки, а затем включить его в путь к классу манифеста:
В качестве альтернативы используйте ${project.build.directory}/classes/lib в качестве outputDirectory для интеграции всех файлов JAR в основной файл JAR, но тогда вам нужно будет добавить пользовательский код загрузки классов для загрузки файлов JAR.
Далее, я бы рекомендовал сделать это естественной частью вашей сборки, а не вызывать что-то явно. Чтобы сделать это неотъемлемой частью вашей сборки, добавьте этот плагин в свой pom.xml и привяжите его к package событию жизненного цикла. Однако проблема в том, что вам нужно вызвать assembly:single цель, если вы добавляете это в свой файл pom.xml, в то время как вы бы вызвали 'assembly: сборка', если выполняете ее вручную из командной строки.