/*
* Copyright $year Lukas Krejci
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License
*
*/
package org.revapi.maven;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Properties;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.plugins.annotations.Execute;
import org.apache.maven.plugins.annotations.LifecyclePhase;
import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.plugins.annotations.Parameter;
import org.apache.maven.project.MavenProject;
/**
* @author Lukas Krejci
* @since 0.4.0
*/
@Mojo(name = "update-release-properties", requiresDirectInvocation = true)
@Execute(phase = LifecyclePhase.PACKAGE)
public class UpdateReleasePropertiesMojo extends AbstractVersionModifyingMojo {
/**
* The suffix to add to the release version, e.g. ".GA", ".Final", "-release". Must include some kind of separator
* as the first character.
*/
@Parameter(name = "releaseVersionSuffix", property = "revapi.releaseVersionSuffix")
private String releaseVersionSuffix;
@Override public void execute() throws MojoExecutionException, MojoFailureException {
setPreserveSuffix(false);
setReplacementSuffix(releaseVersionSuffix);
super.execute();
}
@Override void updateProjectVersion(MavenProject project, Version version) throws MojoExecutionException {
File rpf = getReleasePropertiesFile();
Properties ps = readProperties(rpf);
String relProp;
String devProp;
if (isSingleVersionForAllModules()) {
relProp = "project.rel." + project.getGroupId() + ":" + project.getArtifactId();
devProp = "project.dev." + project.getGroupId() + ":" + project.getArtifactId();
} else {
relProp = "releaseVersion";
devProp = "developmentVersion";
}
ps.setProperty(relProp, version.toString());
Version dev = version.clone();
dev.setPatch(dev.getPatch() + 1);
dev.setSuffix(releaseVersionSuffix == null ? "SNAPSHOT" : releaseVersionSuffix + "-SNAPSHOT");
ps.setProperty(devProp, dev.toString());
try (FileOutputStream out = new FileOutputStream(rpf)) {
ps.store(out, null);
} catch (IOException e) {
throw new MojoExecutionException("Failed to write to the release.properties file.", e);
}
}
@Override void updateProjectParentVersion(MavenProject project, Version version) throws MojoExecutionException {
//we don't do this here
}
private File getReleasePropertiesFile() {
return new File(mavenSession.getExecutionRootDirectory(), "release.properties");
}
private Properties readProperties(File file) {
Properties ps = new Properties();
try (FileInputStream in = new FileInputStream(file)) {
ps.load(in);
return ps;
} catch (FileNotFoundException e) {
return ps;
} catch (IOException e) {
throw new IllegalStateException("Could not read the release.properties file.", e);
}
}
}