it-swarm-ru.tech

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

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

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

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

61
Sindri Traustason

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

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

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

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

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

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

6
ddimitrov

Я не уверен, что вы можете сделать это с помощью командной строки. С другой стороны, вы можете добавить репозитории в 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>
5
Jorge Ferreira

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

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

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

3
Kevin Wright

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

mvn deploy -P MyRepo2

mvn deploy -P MyRepo1
3
Eduard Wirch

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

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

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

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

2
Henry B

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

1
Steve Moyer