Подтвердить что ты не робот

Как получить maven до таймаута раньше при загрузке зависимостей?

Я создаю свой проект с Apache Maven и настроил настраиваемый репозиторий, но когда он попадает в репозиторий, он просто висит очень долго с

Загрузка: http://maven.mycompany.com/m2/org/springframework/spring/2.5.6/spring-2.5.6.pom

через несколько минут он отправляется и загружает его из центрального репо

Загрузка: http://repo1.maven.org/maven2/org/springframework/spring/2.5.6/spring-2.5.6.pom 12K загружено (spring -2.5.6.pom)

Я хочу, чтобы таймаут был намного быстрее. Это происходит со всеми новыми версиями maven. Версия 2.0.6 или более ранняя версия не имела этой проблемы, она будет намного быстрее.

4b9b3361

Ответ 1

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

Например:

<repository>
  <id>myrepo</id>
  <url>http://maven.mycompany.com/m2</url>
  <releases>
    <enabled>true</enabled>
    <updatePolicy>daily</updatePolicy>
  </releases>
  <snapshots>
    <enabled>false</enabled>
    <updatePolicy>always</updatePolicy>
  </snapshots>
</repository>

Допустимые значения:

  • всегда - всегда проверяйте, когда Maven запускается для более новых версий снимков.
  • Никогда - никогда не проверяйте более новые удаленные версии. После этого можно выполнить ручные обновления.
  • daily (по умолчанию) - проверка первого запуска дня (по местному времени)
  • интервал: XXX - проверка каждые XXX минут

Еще одно соображение - это программное обеспечение, которое вы используете для размещения своего внутреннего репозитория. С менеджером репозитория, таким как Nexus, вы можете управлять всеми своими внешними соединениями удаленного репозитория через диспетчера и настраивать тайм-аут для этих удаленных подключений. Затем ваш клиент будет запрашивать только менеджер хранилища, который должен отвечать как можно быстрее как позволяют таймауты.


Update:

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

<profiles>
  <profile>
    <id>remote</id>
    <repositories>
      <repository>
        <id>central</id>
        <url>http://repo1.maven.org</url>
        <releases><enabled>true</enabled></releases>
        <snapshots><enabled>false</enabled></snapshots>
      </repository>
      ...
    </repositories>
  </profile>
  <profile>
    <id>internal</id>
    <repositories>
      <repository>
        <id>myrepo</id>
        <url>http://maven.mycompany.com/m2</url>
        <releases><enabled>true</enabled></releases>
        <snapshots><enabled>false</enabled></snapshots>
      </repository>
      ...
    </repositories>
  </profile>
</profiles>

В приведенной выше конфигурации запуск пакета mvn -Premote не будет подключен к внутреннему репозиторию, поэтому тайм-аут не будет фактором.

Вы можете не указывать профили в каждой сборке, добавляя дополнительные настройки к своим настройкам:

<settings>
  ...
  <activeProfiles>
    <activeProfile>internal</activeProfile>
    <activeProfile>remote</activeProfile>
  </activeProfiles>
  ...
</settings>

Для Maven 2.1 вы можете установить таймаут, добавив конфигурацию на сервере в настройках Maven (~/.m2/settings.xml по умолчанию), например:

<server>
  <id>myrepo</id>
  <configuration>
    <timeout>5000</timeout> <!-- 5 seconds -->
  </configuration>
</server>

Ответ 2

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