Вызвать артефакт 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 не предлагает более легкое решение этого вопроса.

0 ответов

Другие вопросы по тегам