Как пропустить этап установки в сборке Maven, если эта версия уже установлена ​​в репозитории - PullRequest
17 голосов
/ 30 июня 2010

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

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

Ответы [ 5 ]

33 голосов
/ 15 февраля 2012

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

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

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

MINSTALL-73

10 голосов
/ 09 декабря 2010

Большинство плагинов 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 поведение по умолчанию для плагина установки будет заключаться в достижении его цели по умолчанию, но если выбран пример профиля, то плагин установки пропуститцель.

4 голосов
/ 31 марта 2015

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

В своем супер-помпе я добавил модуль 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
1 голос
/ 30 июня 2010

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

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

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

0 голосов
/ 16 апреля 2019

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

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