Как запустить Maven из другого каталога (без cd для проекта dir)?


249

Предположим, что мой проект maven находится в /some/location/projectмоем текущем местоположении, и /another/location/как я могу запустить maven build, не переходя в местоположение проекта cd /some/location/project?


4
@khmarbaise - я пытаюсь автоматизировать сборку и развертывание, используя некоторые сценарии оболочки, и не всегда удобно использовать cd для изменения dir.
Али Шакиба

@khmarbaise - вы можете ссылаться на несколько файлов или папок в одном каталоге или рядом с ним, но ваш pom и файлы, на которые он ссылается, находятся в другом.
jyoungdev

Ответы:


433

Вы можете использовать параметр -fи указать путь к файлу POM, например,mvn -f /path/to/pom.xml

Это запускает Maven «как будто» /path/toдля рабочего каталога.


39
Нет, -f запускает Maven с этим конкретным pom, и по определению каталог, в котором находится pom, является рабочим каталогом для Maven. Я использую это на своем CI-сервере для сборки определенных модулей в подкаталогах, и я могу заверить вас, что это работает.
Данни

15
Используйте точку для относительных путей. напр../path/pom.xml
Снексе

3
Как говорит Данни, это не работает. Текущий каталог там, где вы находитесь. Ты просто используешь пом в другом режиссере. Maven не поддерживает это.
туман

1
java.lang.IllegalArgumentException: параметр 'directory' не является каталогом
Damir Olejar

Работает для большинства моих проектов. К сожалению, некоторые проекты, использующие плагин exec, не могут быть построены таким образом, потому что плагин не находит исполняемый файл, даже если рабочий каталог настроен.
user2043553

15

Я не думаю, что Maven поддерживает это. Если вы работаете в Unix и не хотите покидать текущий каталог, вы можете использовать небольшой сценарий оболочки, функцию оболочки или просто вспомогательную оболочку:

user@host ~/project$ (cd ~/some/location; mvn install)
[ ... mvn build ... ]
user@host ~/project$

В качестве функции bash (которую вы можете добавить в ~ / .bashrc):

function mvn-there() {
  DIR="$1"
  shift
  (cd $DIR; mvn "$@")     
} 

user@host ~/project$ mvn-there ~/some/location install)
[ ... mvn build ... ]
user@host ~/project$

Я понимаю, что это не отвечает на конкретный вопрос, но может дать вам то, что вы ищете. Я не знаком с оболочкой Windows, хотя и там вы сможете найти аналогичное решение.

С уважением


4
Превосходно. Параметр mvn -f не работает с многомодульными проектами, использующими относительный путь для ссылки на дочерние poms. Спасибо, это то, что я искал.
редочка

1
Получил это работает на Mac (и я знаю, что это будет работать на Linux). В Windows (или на любой платформе) вы должны быть в состоянии сохранить текущий путь, cd в ваш проект, выполнить там mvn и вернуться обратно в сценарий. Единственная проблема будет, если сценарий остановится на полпути.
Эрк


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.