Как пропустить этап установки в сборке Maven, если эта версия уже установлена ​​в репозитории

StackOverflow https://stackoverflow.com/questions/3147714

  •  01-10-2019
  •  | 
  •  

Вопрос

У меня есть проект, состоящий из трех разных библиотек.Когда я запускаю сценарий установки, он берет все библиотеки из репозитория и запускает для них чистую установку mvn.Но эта версия библиотеки уже установлена ​​в репозитории.Есть ли способ пропустить этап установки, если версия в pom.xml равна версии в моем локальном репозитории.

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

Это было полезно?

Решение

Вы можете обойти так

-Dmaven.install.skip=true

<profiles>
   <profile>
     <id>skipInstall</id>
     <activation>
       <property>
         <name>maven.install.skip</name>
         <value>true</value>
       </property>
     </activation>
     <build>
       <pluginManagement>
         <plugins>
           <plugin>
             <groupId>org.apache.maven.plugins</groupId>
             <artifactId>maven-install-plugin</artifactId>
             <executions>
               <execution>
                 <id>default-install</id>
                 <phase>none</phase>
               </execution>
             </executions>
           </plugin>
         </plugins>
       </pluginManagement>
     </build>
   </profile>

На прошлой неделе Оливье Лами исправил эту jira.

МИНСТАЛЛ-73

Другие советы

Большинство плагинов maven можно пропустить, указав что-то вроде:

        <plugin>
          <artifactId>maven-install-plugin</artifactId>
          <version>X.Y</version>
          <configuration>
            <skip>true</skip>
          </configuration>
        </plugin>

вы также можете настроить профили сборки для установки свойств и использовать их для определения значения.например, выполнив команду:mvn -Pexample выберет профиль «пример».Тогда POM будет содержать:

...
  <properties>
    <skip.install>false</skip.install>
...
  </properties>

...
    <profile>
      <id>example</id>
      <properties>
        <skip.install>false</skip.install>
      </properties>
    </profile>
...
    <plugin>
      <artifactId>maven-install-plugin</artifactId>
      <version>X.Y</version>
      <configuration>
        <skip>${skip.install}</skip>
      </configuration>
    </plugin>
...

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

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

В моем супер-поме я добавил плагин Управление/плагин для отключения этапов установки по умолчанию и тестирования по умолчанию, когда свойство deployOnly установлен.

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-install-plugin</artifactId>
                <version>2.5.2</version>
                <executions>
                    <execution>
                        <id>default-install</id>
                        <configuration>
                            <skip>${deployOnly}</skip>
                        </configuration>
                    </execution>
                    <execution>
                        <id>default-test</id>
                        <configuration>
                            <skip>${deployOnly}</skip>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

Итак, в командной строке я могу отключить этапы установки и тестирования, добавив -DdeployOnly.

mvn clean install       #build and test everything
mvn deploy -DdeployOnly #just deploy it

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

Вы уверены, что правильно поняли, что имел в виду ваш начальник?Я интерпретирую вышеизложенное как «не устанавливайте сторонние библиотеки в свой локальный репозиторий, используйте только библиотеки, доступные в общедоступных репозиториях».Это отличается от «не использовать локальный репозиторий», что в принципе невозможно, просто maven работает не так.Я бы попробовал уточнить этот момент.

Кроме того, я не понимаю вопроса, который очень сбивает с толку (о каком репо вы говорите?Что делает скрипт установки?Почему вы называете чистую установку библиотек?и т. д).

Расширение других ответов из будущего.

Плагины Maven обладают удивительно высокой свободой в работе.Если они захотят, они могут игнорировать/переопределить типичные настройки pom.xml.Кроме того, также <configuration><skip>true</skip></configuration> это всего лишь соглашение, ничто не обязывает плагин следовать ему, за исключением того, что большинство из них разработаны именно так.

Мои эксперименты с недавней проблемой показывают, что следует использовать решение @Cemo и @MiloshBoroyevich., также плагин требует, чтобы оба действительно оставили нас в покое.Более конкретно, единственной рабочей конфигурацией, которую я использовал, была такая:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-install-plugin</artifactId>
    <version>2.5.2</version>
    <executions>
        <execution>
            <id>default-install</id>
            <phase>none</phase>
        </execution>
    </executions>
    <configuration>
        <skip>true</skip>
    </configuration>
</plugin>
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top