Вот скрипт, который проверяет, нуждается ли система сборки maven в обновлениях. Запустив этот скрипт, вы получите все обновления (но ни одно из них не будет применено). Это позволяет вам изменить все, некоторые или ни одного, как вам удобно.
mvn versions:display-plugin-updates
mvn versions:display-parent-updates
mvn versions:display-dependency-updates
Обычно я сохраняю этот скрипт на верхнем уровне check-versions.sh
или check-versions.cmd
(с учетом языка сценариев).
Чтобы этот скрипт работал, в /project/build/plugins
вам понадобится org.codehaus.mojo:versions-maven-plugin:2.7
или выше. Я обычно настраиваю плагин так:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>versions-maven-plugin</artifactId>
<version>2.7</version>
<configuration>
<generateBackupPoms>false</generateBackupPoms>
</configuration>
</plugin>
Поскольку это не делает резервные копии файлов *. 1044 *, которые загрязняют мою историю git
.
Первые несколько раз, когда вы запускаете этот , вы можете заметить, что унаследованные плагины показывают, что они устарели (поскольку они эффективно встроены в значения по умолчанию в родительском pom maven по умолчанию. xml). Вам нужно будет явно определить значения по умолчанию для более новой версии, чтобы заставить их прекратить создавать отчеты.
Кроме того, вы обнаружите, что многие плагины по-прежнему будут сообщать, поскольку неясно, какой минимум требуемая версия Java и минимальная требуемая версия Apache Maven. Чтобы закодировать эти требования в pom. xml, вы будете использовать плагин Maven Enforcer. Мой пример, который заставляет Maven версии 3.5.4 и Java версии 11:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
<version>3.0.0-M3</version>
<executions>
<execution>
<id>enforce-maven</id>
<goals>
<goal>enforce</goal>
</goals>
<configuration>
<rules>
<requireMavenVersion>
<version>3.5.4</version>
</requireMavenVersion>
<requireJavaVersion>
<version>11</version>
</requireJavaVersion>
</rules>
</configuration>
</execution>
</executions>
</plugin>
С этими инструментами я в настоящее время получаю вывод по одному из моих проектов
[INFO] Scanning for projects...
[INFO]
[INFO] ---------------< com.edwbuck.parserhelp:pascal-adapter >----------------
[INFO] Building pascal-adapter 1.0.0
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- versions-maven-plugin:2.7:display-plugin-updates (default-cli) @ pascal-adapter ---
[INFO] artifact com.github.sevntu-checkstyle:dsm-maven-plugin: checking for updates from central
[INFO] artifact net.nicoulaj.maven.plugins:checksum-maven-plugin: checking for updates from central
[INFO]
[INFO] The following plugin updates are available:
[INFO] maven-project-info-reports-plugin .................... 2.6 -> 3.0.0
[INFO]
[INFO] All plugins have a version specified.
[INFO]
[INFO] Project inherits minimum Maven version as: 3.5.4
[INFO] Plugins require minimum Maven version of: 3.2.1
[INFO]
[INFO] No plugins require a newer version of Maven than specified by the pom.
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.976 s
[INFO] Finished at: 2020-04-16T07:52:12-05:00
[INFO] ------------------------------------------------------------------------
[INFO] Scanning for projects...
[INFO]
[INFO] ---------------< com.edwbuck.parserhelp:pascal-adapter >----------------
[INFO] Building pascal-adapter 1.0.0
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- versions-maven-plugin:2.7:display-parent-updates (default-cli) @ pascal-adapter ---
[INFO] Project does not have a parent.
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.325 s
[INFO] Finished at: 2020-04-16T07:52:15-05:00
[INFO] ------------------------------------------------------------------------
[INFO] Scanning for projects...
[INFO]
[INFO] ---------------< com.edwbuck.parserhelp:pascal-adapter >----------------
[INFO] Building pascal-adapter 1.0.0
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- versions-maven-plugin:2.7:display-dependency-updates (default-cli) @ pascal-adapter ---
[INFO] artifact com.edwbuck.parserhelp:pascal_client: checking for updates from central
[INFO] artifact org.junit.jupiter:junit-jupiter-engine: checking for updates from central
[INFO] artifact org.junit.jupiter:junit-jupiter-api: checking for updates from central
[INFO] artifact org.influxdb:influxdb-java: checking for updates from central
[INFO] The following dependencies in Dependencies have newer versions:
[INFO] org.junit.jupiter:junit-jupiter-api ................... 5.6.0 -> 5.6.2
[INFO] org.junit.jupiter:junit-jupiter-engine ................ 5.6.0 -> 5.6.2
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.848 s
[INFO] Finished at: 2020-04-16T07:52:18-05:00
[INFO] ------------------------------------------------------------------------
, что означает, что мне нужно обновить maven-project-info-reports-plugin
и мои org.junit.jupiter:junit-jupiter-api
и org.junit.jupiter:junit-jupiter-engine
плагины.
Обычно я не использую плагин maven version для фактического обновления в pom. xml file, поскольку текстовые редакторы работают быстро, если вы делаете все обновления, которые хотите сделать в pom. xml за один раз.
В настоящее время плагин maven version, предлагаемый codehaus, не имеет опция командной строки для автоматического обновления более чем одной версии одновременно. Причины этого не просты. Чтобы использовать плагин versions:update-properties
, необходимо:
- Определить политику обновления (что обновлять / что не обновлять) в pom. xml.
- Определите политику обновления (что обновлять / что не обновлять) в командной строке.
Эти правила являются подробными, поскольку охватывают весь проект. Да, они могут использовать глобальное сопоставление, но они все еще многословны. Что касается моих личных проектов, я замечаю, что для того, чтобы они обеспечивали мне надлежащую обработку, я обновлял их слишком часто, поэтому я оставляю их вне изображения, вместо этого решая, что обновлять или не обновлять в то время, когда я работаю над выводом моего check-updates
script.
Это потому, что не всегда безопасно автоматически обновлять плагины и зависимости. Иногда следующая версия плагина требует изменения кода проекта. Например, проекты, переходящие с Java 8 на Java 9, требуют изменений в том, как они построены и связаны. То же самое относится и к зависимостям, если вы хотите, чтобы код был привязан к недекларируемым API.