Fork me on GitHub

Writing an own ChangeRecorder

In order to create an own ChangeRecorder you must implement ChangeRecorder interface.

Write code

import java.io.IOException;
import javax.inject.Named;

import java.nio.file.Path;

import org.codehaus.mojo.versions.api.recording.DependencyChangeRecord;
import org.codehaus.mojo.versions.api.recording.PropertyChangeRecord;
import org.codehaus.mojo.versions.api.recording.ChangeRecorder;

@Named("my-recorder")
public class MyChangeRecorder implements ChangeRecorder {

    @Override
    public final void recordChange(DependencyChangeRecord changeRecord) {
        // your code here
    }

    @Override
    public final void recordChange(PropertyChangeRecord changeRecord) {
        // your code here
    }

    @Override
    public final void writeReport(Path outputPath) throws IOException {
        // your code here
    }
}

Changerecoder is stateful component, so you must not add Singleton annotation to it.

Using extension

Plugin configuration:

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>your.group</groupId>
  <artifactId>your-project</artifactId>
  
  <build>
    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>org.codehaus.mojo</groupId>
          <artifactId>versions-maven-plugin</artifactId>
          <version>2.16.2</version>
          <configuration>
            <!-- your component name -->
            <changeRecorderFormat>my-recorder</changeRecorderFormat>
            <changeRecorderOutputFile>${project.build.directory}/my-versions-changes.txt</changeRecorderOutputFile>
          </configuration>
          <dependencies>
            <dependency>
              <!-- add your extension as plugin dependency -->
              <groupId>your.group</groupId>
              <artifactId>your-extension</artifactId>
              <version>ext.version</version>
            </dependency>
          </dependencies>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>
</project>

Now execution like:

mvn versions:update-properties

will generate your custom report.