Визначення локального сховища Maven як параметр CLI


131

Чи можна встановити місце локального сховища Maven як аргумент у командному рядку Maven?

Річ у тім, що я не використовую стандартний в ~/.m2/repository. Однак я перевірив якийсь проект, який будується з власними налаштуваннями -s settings.xml. Цей параметр.xml не вказує моє локальне сховище, тому Maven ~/.m2/repositoryзнову використовує використання ... Я хотів би використовувати місце локального сховища, яке не використовується за замовчуванням, без додавання <localRepository>елемента в налаштування проекту.xml

Я намагався

  • -DlocalRepository="..."
  • $mvn invoker:run -s settings.xml clean install -DskipTests -DlocalRepositoryPath=
  • -Dsettings.localRepository

але жоден із цих варіантів не працює.

Тому я думаю, що мені доведеться вирішити, чи буду я змінювати налаштування сторонніх файлів.xml або перенести місцеве репо в режим ~


Очевидно, це не ваша вина, але проекти Maven не повинні надавати settings.xml. Дивіться maven.apache.org/guides/mini/guide-configuring-maven.html
oberlies

Відповіді:


258

користуйтеся майном Maven maven.repo.local:

mvn -Dmaven.repo.local=$HOME/.my/other/repository clean install

Ніяких модифікацій settings.xmlне потрібно.


10
Локальне сховище повинно бути абсолютним шляхом, maven.apache.org/guides/mini/guide-configuring-maven.html .
luka5z

3
У Windows використовуйте `mvn -D" maven.repo.local "=% USER_HOME% /. Мій / інший / сховище чисто встановити"
Ігор Бляхін,

Чи можу я встановити змінну середовища для досягнення того ж самого?
порошок366

@ powder366 ні, AFAIK
Петро

Використовуючи maven-3.6.3, локальний репозиторій працює як відносний шлях (принаймні на MacOS)
Ед Рандалл

8

Для git:

alias mvn='mvn "-Dmaven.repo.local=$(git rev-parse --show-toplevel)/.m2/repository"'

Для цього використовується окремий сховище Maven у кожному сховищі git


2

Один з різновидів хакітського способу, який би спрацював:

  1. Додайте <localRepository>${m2.localRepository}</localRepository>до своїх налаштувань.xml
  2. У своєму mvn.sh або mvn.bat додайте -Dm2.localRepository=<full path to home dir>/.m2/repository перед командою, що виконується, "$ @". Це зробить місцеве репо за замовчуванням місце, де воно має бути.
  3. Тепер ви можете використовувати mvn -Dm2.localRepository=... <phases/goals>. Оскільки властивість системи командного рядка додається до командного рядка після того, як у сценарії mvn, це матиме перевагу. (Принаймні, я впевнений, що він працює таким чином і в Windows, і в Linux, але тестування покаже.)

Це не допомагає, я додав -Dm2.localRepository = "custom" перед "$ @" в сценарій mvn, все ще використовує ~ / .m2 / repository ... тоді я також включив -Dm2.localRepository = "custom" під час запуску $ mvn, як і раніше використовує ~ / .m2 / repository ... просто без елемента localRepository в settings.xml, немає можливості змінити його
lisak

@lisak: Ви зробили крок 1 додавання елемента localRepository до settings.xml? Я перевірив це, і це працює, за винятком того, що ви фактично не можете використовувати псевдонім '~' у сценарії mvn. Ви повинні прокласти абсолютний шлях, хоча, ймовірно, ви могли б виконати інший хитрість сценарію оболонки / пакетного пакету, щоб обійти це.
Райан Стюарт

Це працює, але я справді не маю пояснень ... Якщо я декларую локальний репозиторій у $ M2_HOME / conf / settings.xml без кроку 2, він буде замінений на -s settings.xml і не працює, хоча з кроком 2 він працює ... але лише крок 2 без localRepository в $ M2_HOME / conf / settings.xml не працює ... обидва кроки 1,2 повинні бути застосовані, щоб він працював, і я навіть можу змінити розташування потім через $ mvn -Dm2.localRepository = .. дякую Ryan
lisak
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.