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


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

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

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

7 53

7 ответов:

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

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

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

mvn package -Dmaven.repo.remote=http://www.ibiblio.org/maven/,http://myrepo 
  -Dmaven.repo.local="c:\test\repo"

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

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

Я не уверен, если вы можете сделать это с помощью командной строки. Вы можете с другой стороны добавить репозитории в пом.xml как в следующем примере. Используя этот подход, вам не нужно менять ~/.м2/настройки.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>

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

mvn deploy -P MyRepo2

mvn deploy -P MyRepo1

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

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

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

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

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

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

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

создайте POM с нужными настройками репозитория, а затем используйте родительский элемент в Pom проекта для наследования дополнительных репозиториев. Использование" организации " POM имеет несколько других преимуществ, когда группа проектов принадлежит одной команде.