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

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

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

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

Ответы [ 7 ]

68 голосов
/ 28 июля 2009

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

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

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

mvn package -Dmaven.repo.remote=http://www.ibiblio.org/maven/,http://myrepo 
  -Dmaven.repo.local="c:\test\repo"
6 голосов
/ 19 сентября 2008

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

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

5 голосов
/ 16 сентября 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>
3 голосов
/ 09 января 2010

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

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

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

3 голосов
/ 18 сентября 2008

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

mvn deploy -P MyRepo2

mvn deploy -P MyRepo1
2 голосов
/ 16 сентября 2008

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

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

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

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

1 голос
/ 18 сентября 2008

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

...