Maven offline - проблема с mvn-плагинами - PullRequest
5 голосов
/ 07 августа 2009

Я использую maven в своем проекте, и мне нужно запустить сборку на машине без доступа к Интернету .

Когда я тестирую свою сборку проекта, все работает, но когда я запускаю сборку в будущем , maven пытается обновить mvn-plugins и это sh t * ломает мою сборку.

Мой конфигурационный файл: settings.xml от mvn.

    <profile>
      <id>blaProfile</id>
      <repositories>
        <repository>
          <id>blaRepo</id>
          <url>file://${bla.3rdParty.home}/maven/.m2/repository</url>
          <layout>default</layout>
        </repository>
      </repositories>
      <pluginRepositories>
        <pluginRepository>
          <id>blaRepo</id>
          <url>file://${bla.3rdParty.home}/maven/.m2/repository</url>
          <layout>default</layout>
        </pluginRepository>
      </pluginRepositories>
    </profile>

  <activeProfiles>
    <activeProfile>blaProfile</activeProfile>
  </activeProfiles>

И побежал мой мавен с параметрами:

mvn -npu -bla.3rdParty.home="$(THE_CORRECT_PATH)" package

Я видел, что maven некоторое время пытается обновить некоторые mvn-плагины, но опция:

-npu,--no-plugin-updates      Suppress upToDate check for any relevant

Должно работать для этого обновления.

Хорошо, жду помощи по этому поводу!

Заранее спасибо!


UPDATE (1):
Я смотрю на то, что я могу использовать настройку:
<usePluginRegistry>true</usePluginRegistry>

Внутри моего settings.xml и с этим у меня будет plugin-registry.xml внутри $ {user.home} /. M2, который я могу настроить и принудительно настроить версии плагинов maven.

Но это не работает! (

Ответы [ 4 ]

7 голосов
/ 07 августа 2009

Прежде чем перейти в автономный режим, выполните следующее:

mvn dependency:go-offline

Это загрузит все ваши зависимости и плагины, необходимые для сборки вашего проекта в ~ / .m2 / repository.

После того, как вы запустите, вы можете построить свой проект в автономном режиме, используя флаг '-o':

mvn install -o
4 голосов
/ 05 сентября 2016

Чтобы кэшировать плагины в папке .m2 / repository, вам необходимо явно указать все плагины с помощью mvn <maven-plugin-name>:help

Вам также необходимо указать явную версию для каждого плагина в разделе <plugins> или <pluginsManagement> вашего pom.xml

<plugin> 
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-surefire-plugin</artifactId>
  <version>2.19</version>
  <dependencies>
    <dependency>
      <groupId>org.apache.maven.surefire</groupId>
      <artifactId>surefire-testng</artifactId>
      <version>2.19</version>
    </dependency>
  </dependencies>
</plugin>

Это необходимо для того, чтобы mvn install -o использовал ту же версию плагина.

Конечно, вам также нужно запустить mvn dependency:go-offline, чтобы позаботиться о ваших зависимостях компиляции и тестирования.

mvn assembly:help compiler:help enforcer:help exec:help failsafe:help install:help jar:help resources:help surefire:help mvn dependency:go-offline mvn compile --offline

2 голосов
/ 27 сентября 2012

Достаточно запустить mvn clean install в вашем коде. В следующий раз, когда вы запустите его в автономном режиме, вы можете использовать следующие опции:

mvn -Dmaven.repo.local=..\repository –o clean install

-o говорит maven не пытаться обновлять свои зависимости по сети, а с -Dmaven.repo.local вы указываете путь к хранилищу, в котором содержатся все необходимые зависимости. Кроме того, вы можете добавить путь к хранилищу в файле settings.xml в теге localRepository и добавить <offline>true</offline>. Вы можете настроить то же самое в своих конфигурациях Maven Eclipse.

0 голосов
/ 07 августа 2009

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

Под точными версиями я подразумеваю, что в POM вашего проекта вы должны добавить версию в объявление плагина. Например:

<plugins>
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <!-- set the version explicitly-->
    <version>2.0</version>
  </plugin>
</plugins>

Обратите внимание, что вы также можете заставить Maven использовать внутренние репозитории вместо Central, настроив зеркала репозитория. См. этот ответ для более подробной информации об использовании менеджеров репозитория и зеркал.

В конфигурации, которую вы включили, вы устанавливаете свой удаленный репозиторий так, чтобы он указывал на ваш локальный репозиторий, это не очень хорошая идея. Для запуска в автономном режиме вы должны либо ввести -o в командной строке, либо добавить это в файл settings.xml:

<offline>true</offline>
...