Могу ли я добавить репозитории maven в командной строке?

Я знаю, что могу добавить репозитории maven для получения зависимостей в ~/.m2/settings.xml. Но можно ли добавить репозиторий с помощью командной строки, например:

mvn install -Dmaven.repository=http://example.com/maven2

Причина, по которой я хочу это сделать, заключается в том, что я использую инструмент непрерывной интеграции, где у меня есть полный контроль над параметрами командной строки, которые он использует для вызова maven, но управление файлом settings.xml для пользователя, который запускает инструмент интеграции, немного хлопот.


person Sindri Traustason    schedule 16.09.2008    source источник


Ответы (7)


Вы можете сделать это, но вам, вероятно, лучше делать это в POM, как говорили другие.

В командной строке вы можете указать свойство для локального репозитория и другое хранилище для удаленных репозиториев. Однако удаленный репозиторий будет иметь все настройки по умолчанию.

В приведенном ниже примере указаны два удаленных репозитория и пользовательский локальный репозиторий.

mvn package -Dmaven.repo.remote=http://www.ibiblio.org/maven/,http://myrepo 
  -Dmaven.repo.local="c:\test\repo"
person Rich Seller    schedule 28.07.2009
comment
Это полезно для тестирования закрытого репозитория сонатипов перед выпуском. - person schmmd; 08.10.2012
comment
Как указать имя пользователя и пароль для пульта? - person Daniil Shevelev; 04.12.2014
comment
Также можно определить переменную MAVEN_OPTS, поэтому вам не нужно определять -Dmaven.repo.local каждый раз, когда вы вызываете run maven. - person Arnost Valicek; 05.05.2015
comment
Вы также можете определить переменную MAVEN_OPTS, чтобы не устанавливать этот параметр каждый раз при запуске maven. См. stackoverflow.com/questions/16591080/ для некоторых примеров. - person Arnost Valicek; 05.05.2015
comment
Локальный репозиторий должен быть абсолютным путем, maven.apache.org/guides /mini/guide-configuring-maven.html. - person luka5z; 28.12.2016
comment
@ luka5z Я могу прекрасно использовать относительный путь в Windows Maven 3.5.4, например mvn -Dmaven.repo.local=lib - person Cardin; 15.09.2018
comment
Не работает в maven 3. Я не нашел возможности установить удаленное репо из командной строки в более новом maven. - person neves; 27.08.2019

Одной из целей объектной модели проекта Maven't (POM) является сбор всей информации, необходимой для надежного воспроизведения артефакта, поэтому передача параметров, влияющих на создание артефакта, настоятельно не рекомендуется.

Чтобы достичь своей цели, вы можете зарегистрировать свой файл settings.xml на уровне пользователя с каждым проектом и использовать параметр -s (или --settings), чтобы передать его в сборку.

person Community    schedule 18.09.2008

Я не уверен, что вы можете сделать это с помощью командной строки. С другой стороны, вы можете добавить репозитории в pom.xml, как показано в следующем примере. При таком подходе вам не нужно изменять файл ~/.m2/settings.xml.

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    ...
    <repositories>
            <repository>
                <id>MavenCentral</id>
                <name>Maven repository</name>
                <url>http://repo1.maven.org/maven2</url>
                <releases>
                    <enabled>true</enabled>
                </releases>
                <snapshots>
                    <enabled>false</enabled>
                </snapshots>
            </repository>
...
            <repository>
                <id>Codehaus Snapshots</id>
                <url>http://snapshots.repository.codehaus.org/</url>
                <snapshots>
                    <enabled>true</enabled>
                </snapshots>
                <releases>
                    <enabled>false</enabled>
                </releases>
            </repository>
        </repositories>

    ...

        <pluginRepositories>
            <pluginRepository>
                <id>apache.snapshots</id>
                <name>Apache Snapshot Repository</name>
                <url>
                    http://people.apache.org/repo/m2-snapshot-repository
                </url>
                <releases>
                    <enabled>false</enabled>
                </releases>
            </pluginRepository>
            <pluginRepository>
                <id>Codehaus Snapshots</id>
                <url>http://snapshots.repository.codehaus.org/</url>
                <snapshots>
                    <enabled>true</enabled>
                </snapshots>
                <releases>
                    <enabled>false</enabled>
                </releases>
            </pluginRepository>
        </pluginRepositories>

    ...

    </project>
person Jorge Ferreira    schedule 16.09.2008

Как уже сказал @Jorge Ferreira, поместите определения репозитория в pom.xml. Используйте профили, чтобы выбрать репозиторий для использования через командную строку:

mvn deploy -P MyRepo2

mvn deploy -P MyRepo1
person Eduard Wirch    schedule 18.09.2008

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

В этом случае лучше всего использовать управляемый прокси-сервер, такой как Artifextory или Nexus. Затем внесите однократное изменение в settings.xml, чтобы настроить его как зеркало для всего мира.

Любые сторонние репозитории, которые вам нужно добавить с этого момента, могут обрабатываться через прокси.

person Kevin Wright    schedule 09.01.2010

Раньше я действительно не использовал maven 2, наша система все еще работает на maven 1.x из-за некоторых проблем с maven 2.

Однако, глядя на документацию для maven 2, кажется, что нет никаких конкретных свойств системы, подобных этому. Однако вы, вероятно, могли бы встроить его в свои poms/settings, используя свойства системы. См. часть свойств системы на этом http://maven.apache.org/settings.html.

Таким образом, у вас будет ${maven.repository} в вашем файле настроек, а затем вы будете использовать -Dmaven.repository, как вы делали выше.

Я не уверен, что это сработает, но с некоторыми настройками, я уверен, вы сможете что-то придумать.

person Henry B    schedule 16.09.2008
comment
-Dmaven.repo.remote не работает с более новыми версиями Maven. Я понимаю, что настройки XML лучше, но я бы хотел, чтобы эта опция запускала сборки на серверах, которые я не контролирую :( - person scottysseus; 13.11.2018

Создайте POM с нужными вам настройками репозитория, а затем используйте родительский элемент в POM вашего проекта, чтобы наследовать дополнительные репозитории. Использование «организационной» POM имеет несколько других преимуществ, когда группа проектов принадлежит одной команде.

person Steve Moyer    schedule 18.09.2008