Как отключить зеркальный репозиторий в настройках maven

В моем maven ~./. m2/settings.xml я определил зеркало и некоторые репозитории:

 <mirrors>
    <mirror>
    <id>someid</id>
        .....
    </mirro>
 </mirrors>
...

<profiles>
    <profile>
         <id>default</id>
            <activation>
                     <activeByDefault>true</activeByDefault>
                 </activation>
                 <repositories>
            <repository>                                                                    <id>repo....</id>
....

         </profile>
</profiles>

Это отлично работает.

Есть несколько проектов, в которых я хочу отключить зеркало и профиль по умолчанию. Я знаю, что я могу определить отдельный профиль для репозиториев, но я не знаю, как я могу сказать, что плагин maven eclipse не использует профиль по умолчанию или определенный профиль. Также: как изменить зеркало для проекта?

Ответы

Ответ 1

Скопируйте файл settings.xml, удалите запись mirror и сообщите maven для использования с опцией командной строки файла --settings.

Для автоматизации процесса используйте XSLT или инструмент командной строки, например XMLStarlet:

xmlstarlet ed -N 's=http://maven.apache.org/SETTINGS/1.0.0' --delete "//s:mirror" settings.xml

выводит новый settings.xml файл на stdout, который не содержит зеркальных настроек.

Ответ 2

К сожалению, это невозможно с помощью single settings.xml. В Maven JIRA есть запрос функции, проголосуйте за это!

Обходной путь состоит в том, чтобы иметь два параметра settings.xml и запустить maven с выбранной конфигурацией:

mvn -s my-settings.xml

Ответ 3

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

Если вы хотите, чтобы разные проекты имели разные profiles, вам следует указать их в проекте pom. Вам не нужно иметь <profiles> в ~/m2/settings.xml.

Что касается <mirrors>, они применяются к repositories, которые вы хотите зеркалировать. Вы можете выбрать, какие репозитории должны быть зеркалированы, но не какие проекты должны использовать зеркало, а какие нет. Вы всегда можете запустить проект в режиме offline, если вы не хотите его загружать из удаленного репозитория.

Ответ 4

Несколько settings.xml не нужно, я думаю, для этого.

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

Я могу использовать свойство для моего репозитория id, например, суффикс ${repo-suffix}

$ mvn help:effective-pom | grep "<distributionManagement>" -A 3
  <distributionManagement>
    <repository>
      <id>deployment${repo-suffix}</id>
      <name>Internal Releases</name>

Затем я могу добавить repo-suffix к профилю, например, чтобы дать ему значение -1.

<profile>
  <id>my-profile</id>
  <activation>
    <activeByDefault>true</activeByDefault>
  </activation>
    <properties>
      <repo-suffix>-1</repo-suffix>
      ...

Таким образом, теперь у меня есть динамически определенный идентификатор репозитория в файлах pom.

$ mvn help:effective-pom | grep "<distributionManagement>" -A 3
  <distributionManagement>
    <repository>
      <id>deployment-1</id>
      <name>Internal Releases</name>

Для этих репозиторий deployment-1 я могу определить зеркала в моем settings.xml. Это фактически то же самое, что и возможность помещать зеркало в профиль.