Как запустить 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для рабочего каталога.

dunni
источник
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 и вернуться обратно в сценарий. Единственная проблема будет, если сценарий остановится на полпути.
Эрк
8

Для меня работает так: mvn -f /path/to/pom.xml [goals]

Джонатан Патрисио Бенедет
источник
0

Вы можете попробовать это:

pushd ../
maven install [...]
popd
Мик
источник