Как пропустить этап установки в сборке Maven, если у меня уже установлена эта версия в режиме репо
У меня есть проект, состоящий из 3 разных библиотек. Когда я запускаю install script, он берет все библиотеки из репо и запускает mvn clean install на них. Но эта версия библиотеки уже установлена в репо. Есть ли способ пропустить фазу установки, если версия в pom.xml равна версии в моем локальном репо.
Я знаю, что могу использовать локальное репо и просто устанавливать зависимости. Но мой босс хочет, чтобы наш проект мог строить только с публичными репозиториями и без каких-либо наших репозиций.
Ответы
Ответ 1
Вы можете обойти как это
-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
Ответ 2
Большинство плагинов 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, поведение по умолчанию для плагина установки будет состоять из цели по умолчанию, но если выбран профиль профиля, то плагин установки пропустит его цель.
Ответ 3
Используя то, что я узнал из других ответов, это был самый чистый результат для меня.
В моем супер-помпе я добавил 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
Ответ 4
Я знаю, что могу использовать локальное репо и просто устанавливать зависимости. Но мой босс хочет, чтобы наш проект мог строить только с публичными репозиториями и без каких-либо наших репозиций.
Вы уверены, что правильно поняли, что означал ваш босс? Я интерпретирую это как "не устанавливайте сторонние библиотеки в вашем локальном репозитории, используйте только библиотеки, доступные в публичных репозиториях". Это отличается от "не использовать ваш локальный репозиторий", что в принципе невозможно, это просто не то, как работает maven. Я попытаюсь прояснить этот момент.
Кроме того, я не задаю вопрос, который очень смущает (о каком репо вы говорите? Что делает установка script? Почему вы называете чистую установку в библиотеках? и т.д.).
Ответ 5
Расширяя другие ответы, из будущего.
Плагины 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>