Знаток - установка артефактов к локальному репозиторию в рабочей области

Я хотел бы иметь путь, которым 'mvn установка' помещает файлы в папку репозитория под моим источником (контроль) корень, при использовании сторонних зависимостей от ~/.m2/repository.

Таким образом, после 'mvn установка', расположение:

/work/project/
    repository
      com/example/foo-1.0.jar
      com/example/bar-1.0.jar
    foo
      src/main/java
    bar
      src/main/java

~/.m2/repository
    log4j/log4j/1.2/log4j-1.2.jar

(В частности,/work/project/repository не содержит log4j),

В сущности я ищу способ создать составной репозиторий, это ссылается на другие репозитории

Мое намерение состоит в том, чтобы смочь иметь несколько контроля того же источника и работы над каждым, не перезаписывая друг друга в локальном репозитории с 'установкой'. Несколько контроля могут быть из-за работы над различными ответвлениями в cvs/svn, но в моем случае это происходит из-за клонирования основного ответвления в мерзавце (в мерзавце, каждый клон похож на ответвление). Мне не нравятся альтернативы, которые должны использовать специальную версию / классификатор на контроль, или переустановить (восстанавливают) все каждый раз, когда я переключаюсь.

20
задан Ondra Žižka 4 December 2017 в 22:06
поделиться

2 ответа

Maven может выполнять поиск в нескольких репозиториях (локальный, удаленный, «поддельный» удаленный) для разрешения зависимостей, но есть только ОДИН локальный репозиторий, в который во время установки устанавливаются артефакты . Было бы настоящим кошмаром устанавливать артефакты в определенные места и поддерживать этот список, ничего не нарушая, это просто не сработает, вы не хотите этого делать.

Но, TBH, я не понимаю. Итак, почему вы хотите это сделать? Могут быть альтернативные и более простые решения, такие как установка ваших артефактов в локальный репозиторий, а затем их копирование в корень вашего проекта. Почему это не сработает? Я действительно хотел бы знать окончательное намерение.

ОБНОВЛЕНИЕ: Прочитав обновление исходного вопроса, единственное решение, которое я могу придумать (учитывая, что вы не хотите использовать разные версии / теги), - это использовать два локальных репозитория и переключаться между их (хотя очень подвержены ошибкам).

Для этого либо используйте разные учетные записи пользователей (поскольку локальный репозиторий по умолчанию зависит от пользователя).

Или обновляйте свой ~ / .m2 / settings.xml каждый раз, когда вы хотите переключиться:

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
                      http://maven.apache.org/xsd/settings-1.0.0.xsd">
  <localRepository>${user.home}/.m2/repository</localRepository>
  <!--localRepository>${user.home}/.m2/repository2</localRepository-->
  ...
</settings>

Или создайте другой settings.xml и укажите на него, используя - settings option:

mvn install --settings /path/to/alternate/settings.xml

Или укажите альтернативное местоположение в командной строке с помощью параметра -Dmaven.repo.local :

mvn -Dmaven.repo.local=/path/to/repo

Все эти решения подвержены ошибкам, как я сказал, и ни один из них не приносит особого удовлетворения. Даже если у вас могут быть очень веские причины работать над несколькими ветвями параллельно, ваш вариант использования (не перестраивать все) не очень распространен. Здесь использование разных учетных записей пользователей может быть менее худшим решением IMO.

29
ответ дан 30 November 2019 в 00:39
поделиться

Это невозможно с клиентом командной строки, но вы можете создать более сложные компоновки репозитория с помощью сервера репозитория Maven типа Nexus.

Причина, по которой это невозможно, заключается в том, что Maven позволяет гнездить проекты, и большинство из них будут ссылаться друг на друга, поэтому установка каждого артефакта в отдельном репозитории приведет к множеству поисков на вашем локальном жестком диске (или к неудачным сборкам при запуске сборки в подпроекте).

.
0
ответ дан 30 November 2019 в 00:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: