Как пропустить этап установки в сборке Maven, если эта версия уже установлена в репозитории
Вопрос
У меня есть проект, состоящий из трех разных библиотек.Когда я запускаю сценарий установки, он берет все библиотеки из репозитория и запускает для них чистую установку 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.
Другие советы
Большинство плагинов 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>