Як запустити Maven з іншого каталогу (без компакт-диска для проекту dir)?


249

Припустимо, що мій проект Maven розташований у /some/location/projectмоєму поточному місці розташування - /another/location/як я можу запустити збірку Maven без зміни місця розташування проекту cd /some/location/project?


4
@khmarbaise - я намагаюся автоматизувати збирання та розгортання за допомогою деяких скриптів оболонки, і це не просто використовувати CD завжди для зміни dir.
Алі Шакіба

@khmarbaise - ви можете посилатися на кілька файлів або папок в одному каталозі або поблизу, але ваші пом і файли, на які він посилається, знаходяться в іншій.
jyoungdev

Відповіді:


432

Ви можете скористатися параметром -fі вказати шлях до вашого файла Pom, наприкладmvn -f /path/to/pom.xml

Це запускає maven "так, ніби" це /path/toдля робочого каталогу.


39
Ні, -f запускає Maven з тієї конкретної пом, і за визначенням каталог, де знаходиться pom, є робочим каталогом Maven. Я використовую це на своєму CI-сервері для створення конкретних модулів у підкаталогах, і я можу запевнити вас, що він працює.
dunni

15
Використовуйте крапку для відносних шляхів. наприклад./path/pom.xml
Snekse

3
Як каже Данні, це не працює. Поточний реж, де ти є. Ви просто використовуєте помпон в іншому режимі. Мейвен це не підтримує.
туман

1
java.lang.IllegalArgumentException: Параметр 'каталог' не є каталогом
Дамір Оледжар

Працює для більшості моїх проектів. На жаль, деякі проекти, що використовують плагін exec, не можуть бути побудовані таким чином, оскільки плагін не знаходить виконуваний файл, навіть якщо робочий каталог налаштований.
користувач2043553

15

Я не думаю, що Мейвен це підтримує. Якщо ви перебуваєте в 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 парам не працює з мультимодульними проектами, використовуючи відносний шлях для орієнтації на дітей-членів. Спасибі, саме це я шукав.
редочка

1
Зробив це на Mac (і я знаю, що він буде працювати в Linux). У Windows (або будь-якій платформі) ви маєте змогу зберегти поточний шлях, компакт-диск до свого проекту, робити там mvn і повернути CD-скрипт. Єдине питання було б, якби сценарій зупинився на півдорозі.
Ерк


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.