Skip to content

Instantly share code, notes, and snippets.

@s-kocher
Last active October 31, 2023 14:41
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save s-kocher/f8be272af9504a6319299ffa2849a803 to your computer and use it in GitHub Desktop.
Save s-kocher/f8be272af9504a6319299ffa2849a803 to your computer and use it in GitHub Desktop.
Sample pom.xml

This sample pom.xml uses latest maven plugins versions and some useful dependencies (tests, lombok, ...) so it's useful to bootstrap a new projet or update an existing project needing some upgrades.

Latest maven plugins : https://maven.apache.org/plugins/index.html

All versions of plugins and dependencies are handled in pluginManagement and dependencyManagement so there are easily movable in a parent for a multi modules project.

Plugin org.codehaus.mojo:versions-maven-plugin with help of maven-enforcer-plugin allows to check available updates (plugins, dependencies, properties, parent, ...), generate report, automatically update your pom files. Useful commands in terminal to leverage versions-maven-plugin :

  • Check all updates : mvn versions:display-parent-updates versions:display-dependency-updates versions:display-plugin-updates versions:display-property-updates -DprocessDependencyManagementTransitive=false
  • Generate reports in target/site/*-updates-report.html: mvn versions:dependency-updates-report versions:plugin-updates-report versions:property-updates-report -DprocessDependencyManagementTransitive=false
  • Automatically update parent and properties : mvn versions:update-parent versions:update-properties

Bash :

mvn -DprocessDependencyManagementTransitive=false \
  versions:display-parent-updates \
  versions:display-dependency-updates \
  versions:display-plugin-updates \
  versions:display-property-updates
  
mvn -DprocessDependencyManagementTransitive=false \
  versions:dependency-updates-report \
  versions:plugin-updates-report \
  versions:property-updates-report
  
mvn versions:update-parent versions:update-properties

MS Batch :

mvn -DprocessDependencyManagementTransitive=false ^
  versions:display-parent-updates ^
  versions:display-dependency-updates ^
  versions:display-plugin-updates ^
  versions:display-property-updates
  
mvn -DprocessDependencyManagementTransitive=false ^
  versions:dependency-updates-report ^
  versions:plugin-updates-report ^
  versions:property-updates-report
  
mvn versions:update-parent versions:update-properties

Standalone launch (without editing pom.xml) :
mvn org.codehaus.mojo:versions-maven-plugin:2.15.0:display-property-updates -DprocessDependencyManagementTransitive=false

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>group.dummy-id</groupId>
<artifactId>artifact-dummy-id</artifactId>
<version>1.0.0-SNAPSHOT</version>
<properties>
<java.version>17</java.version>
<maven.compiler.release>${java.version}</maven.compiler.release>
<maven.version.minimum>3.8</maven.version.minimum>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<!-- Dependencies versions -->
<lombok.version>1.18.30</lombok.version>
<commons-lang3.version>3.13.0</commons-lang3.version>
<slf4j.version>2.0.9</slf4j.version>
<logback.version>1.4.11</logback.version>
<!-- Test dependencies versions -->
<junit.version>5.10.0</junit.version>
<assertj.version>3.24.2</assertj.version>
<mockito.version>5.6.0</mockito.version>
<!-- Maven plugins versions -->
<maven-plugin.clean.version>3.3.2</maven-plugin.clean.version>
<maven-plugin.resources.version>3.3.1</maven-plugin.resources.version>
<maven-plugin.compiler.version>3.11.0</maven-plugin.compiler.version>
<maven-plugin.surefire.version>3.2.1</maven-plugin.surefire.version>
<maven-plugin.jar.version>3.3.0</maven-plugin.jar.version>
<maven-plugin.assembly.version>3.6.0</maven-plugin.assembly.version>
<maven-plugin.install.version>3.1.1</maven-plugin.install.version>
<maven-plugin.release.version>3.0.1</maven-plugin.release.version>
<maven-plugin.deploy.version>3.1.1</maven-plugin.deploy.version>
<maven-plugin.dependency.version>3.6.1</maven-plugin.dependency.version>
<maven-plugin.site.version>4.0.0-M11</maven-plugin.site.version>
<maven-plugin.verifier.version>1.1</maven-plugin.verifier.version>
<maven-plugin.failsafe.version>3.2.1</maven-plugin.failsafe.version>
<maven-plugin.antrun.version>3.1.0</maven-plugin.antrun.version>
<!-- Other plugins versions -->
<versions-maven-plugin.version>2.16.1</versions-maven-plugin.version>
<maven-enforcer-plugin.version>3.4.1</maven-enforcer-plugin.version>
</properties>
<dependencyManagement>
<dependencies>
<!-- Regular dependencies -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>${logback.version}</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>${commons-lang3.version}</version>
</dependency>
<!-- Test Dependencies -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
<version>${assertj.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-junit-jupiter</artifactId>
<version>${mockito.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
</dependency>
<!-- Test Dependencies -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
</dependency>
<dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-junit-jupiter</artifactId>
</dependency>
</dependencies>
<build>
<pluginManagement>
<plugins>
<!-- Maven Plugins -->
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>${maven-plugin.clean.version}</version>
</plugin>
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<version>${maven-plugin.dependency.version}</version>
</plugin>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>${maven-plugin.resources.version}</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>${maven-plugin.compiler.version}</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>${maven-plugin.surefire.version}</version>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>${maven-plugin.assembly.version}</version>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>${maven-plugin.jar.version}</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>${maven-plugin.install.version}</version>
</plugin>
<plugin>
<artifactId>maven-release-plugin</artifactId>
<version>${maven-plugin.release.version}</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>${maven-plugin.deploy.version}</version>
</plugin>
<plugin>
<artifactId>maven-site-plugin</artifactId>
<version>${maven-plugin.site.version}</version>
</plugin>
<plugin>
<artifactId>maven-enforcer-plugin</artifactId>
<version>${maven-enforcer-plugin.version}</version>
<executions>
<execution>
<id>enforce-maven</id>
<goals>
<goal>enforce</goal>
</goals>
<configuration>
<rules>
<requireMavenVersion>
<version>${maven.version.minimum}</version>
</requireMavenVersion>
<requireJavaVersion>
<version>${java.version}</version>
</requireJavaVersion>
</rules>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<version>${maven-plugin.antrun.version}</version>
</plugin>
<plugin>
<artifactId>maven-verifier-plugin</artifactId>
<version>${maven-plugin.verifier.version}</version>
</plugin>
<plugin>
<artifactId>maven-failsafe-plugin</artifactId>
<version>${maven-plugin.failsafe.version}</version>
</plugin>
<!-- Other plugins -->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>versions-maven-plugin</artifactId>
<version>${versions-maven-plugin.version}</version>
<executions>
<execution>
<phase>validate</phase>
<goals>
<goal>display-parent-updates</goal>
<goal>display-dependency-updates</goal>
<goal>display-plugin-updates</goal>
<goal>display-property-updates</goal>
<goal>dependency-updates-report</goal>
<goal>plugin-updates-report</goal>
<goal>property-updates-report</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>versions-maven-plugin</artifactId>
</plugin>
<!-- Needed to set the minimum maven version so versions-maven-plugin can correctly provide what is available -->
<plugin>
<artifactId>maven-enforcer-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment