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

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

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


person ximage    schedule 30.06.2010    source источник
comment
Оливье Лами также пропатчил https://jira.codehaus.org/browse/MINSTALL-73   -  person Cemo    schedule 19.07.2012
comment
См. также superuser.com/questions/259907/   -  person Raedwald    schedule 22.10.2018


Ответы (5)


Можно так обойти

-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>

Last week Olivier Lamy patched this jira.

MINSTALL-73

person Cemo    schedule 15.02.2012
comment
Это решение не сработало для меня. Я также заметил, что в файле maven settings.xml было предупреждение о том, что элемент ‹build› не распознан. Я предложу свое решение в ответ. - person Doug; 31.03.2015

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

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

вы также можете настроить профили сборки, чтобы установить свойства и использовать их для определения значения. например, запуск команды: mvn -Pexample выберет профиль «example». Затем 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 поведение по умолчанию для подключаемого модуля установки будет заключаться в выполнении своей цели по умолчанию, но если выбран пример профиля, то подключаемый модуль установки пропустит свою цель.

person Milosh Boroyevich    schedule 09.12.2010
comment
Это лучшее решение. Но не все плагины имеют пропуск. - person ximage; 27.04.2011
comment
У плагина установки есть конфигурация пропуска? - person Cemo; 15.02.2012
comment
maven-install-plugin не имеет параметра конфигурации skip. Предоставленное решение в основном не работает вообще. - person Michał Kalinowski; 25.04.2012
comment
@MichalKalinowski Начиная с версии 2.4, см. https://jira.codehaus.org/browse/MINSTALL-73 - person Brad Cupit; 24.07.2014

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

В моем супер-помпе я добавил pluginManagement/plugin для отключения фаз установки по умолчанию и тестирования по умолчанию, когда установлено свойство 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
person Doug    schedule 31.03.2015

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

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

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

person Pascal Thivent    schedule 30.06.2010

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

Плагины 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>
person peterh    schedule 16.04.2019