Вызвать артефакт Maven из сценария Bash, передавая произвольные аргументы?
Цель состоит в том, чтобы иметь скрипт Bash, который запускает Java-программу из проекта, созданного с помощью Maven, в идеале с classpath, который использует все JAR-файлы, необходимые из кэша Maven.
Я могу придумать два решения для этого, но все они немного уродливы или не могут справиться с определенными проблемами:
1) использовать exec:java
плагин / цель. Проблема, которую я не мог решить, состоит в том, что с помощью этого решения нельзя передавать произвольные аргументы программе из командной строки: единственный способ передать аргументы - установить значение mvn
аргумент командной строки. Поэтому, если есть несколько аргументов, это значение должно быть заключено в кавычки. Однако, если аргументы для передачи в программу должны заключаться в кавычки, и, например, значения опций могут содержать пробелы, кажется, что сделать это невозможно.
2) с помощью плагина зависимости создайте файл, содержащий путь к классу, используя build-classpath
Цель. Это замечательно, если создать файл, содержащий расположения всех JAR-файлов в кэше Maven, от которых зависит проект. Однако, кажется, невозможно также добавить местоположение файла JAR артефакта проекта в этот файл. Поэтому содержимое этого файла нужно как-то объединить с расположением JAR проекта:
2.1) использовать mvn package
и использовать банку в target
каталог. Это некрасиво, потому что в идеале мы также хотели бы использовать JAR из кэша Maven, как для зависимостей
2.2) есть еще один фиктивный проект Maven, который зависит от того, который я хочу запустить, и использую build-classpath
цель там. Это даст мне полный путь к классу, но за счет необходимости иметь другой проект и выполнить необходимые цели в этом проекте. Если проект находится в подкаталоге исходного проекта, я также не вижу хорошего способа построить этот поддельный проект как часть основного проекта, за исключением, возможно, использования exec:exec
плагин / цель, которая уродлива
Есть ли что-то, что я пропускаю, или рекомендуемый способ сделать это более простым способом?
ОБНОВЛЕНИЕ: меня спросили в комментариях, почему я хочу использовать кеш Maven в первую очередь. Причина в том, что в этом контексте мы знаем, что все необходимое уже находится в кеше maven, мы говорим о довольно больших цепочках зависимостей, и было бы очень неловко и неуклюже использовать другой механизм и другой кеш, просто для того, чтобы эта работа. Трудно понять, почему Maven не предлагает более легкое решение этого вопроса.