GenerateStubsMojo.java
/*
* Copyright 2013-2016 the original author or authors.
*
* 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
*
* https://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.springframework.cloud.contract.maven.verifier;
import java.io.File;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.plugins.annotations.Component;
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;
import org.apache.maven.project.MavenProjectHelper;
import org.codehaus.plexus.archiver.Archiver;
import org.codehaus.plexus.archiver.jar.JarArchiver;
@Mojo(name = "generateStubs", defaultPhase = LifecyclePhase.PACKAGE,
requiresProject = true)
public class GenerateStubsMojo extends AbstractMojo {
private static final String STUB_MAPPING_FILE_PATTERN = "**/*.json";
private static final String CONTRACT_FILE_PATTERN = "**/*.groovy";
@Parameter(defaultValue = "${project.build.directory}", readonly = true,
required = true)
private File projectBuildDirectory;
@Parameter(property = "stubsDirectory",
defaultValue = "${project.build.directory}/stubs")
private File outputDirectory;
/**
* Set this to "true" to bypass Verifier execution..
*/
@Parameter(property = "spring.cloud.contract.verifier.skip", defaultValue = "false")
private boolean skip;
@Component
private MavenProjectHelper projectHelper;
@Parameter(defaultValue = "${project}", readonly = true)
private MavenProject project;
@Component(role = Archiver.class, hint = "jar")
private JarArchiver archiver;
@Parameter(defaultValue = "true")
private boolean attachContracts;
@Parameter(defaultValue = "stubs")
private String classifier;
public void execute() throws MojoExecutionException, MojoFailureException {
if (skip) {
getLog().info(
"Skipping Spring Cloud Contract Verifier execution: spring.cloud.contract.verifier.skip="
+ skip);
return;
}
File stubsJarFile = createStubJar(outputDirectory);
projectHelper.attachArtifact(project, "jar", classifier, stubsJarFile);
}
private File createStubJar(File stubsOutputDir)
throws MojoFailureException, MojoExecutionException {
if (!stubsOutputDir.exists()) {
throw new MojoExecutionException(
"Stubs could not be found: [" + stubsOutputDir.getAbsolutePath()
+ "] .\nPlease make sure that spring-cloud-contract:convert was invoked");
}
String stubArchiveName =
project.getBuild().getFinalName() + "-" + classifier + ".jar";
File stubsJarFile = new File(projectBuildDirectory, stubArchiveName);
try {
if (attachContracts) {
archiver.addDirectory(stubsOutputDir,
new String[] { STUB_MAPPING_FILE_PATTERN, CONTRACT_FILE_PATTERN },
new String[0]);
}
else {
getLog().info(
"Skipping attaching Spring Cloud Contract Verifier contracts");
archiver.addDirectory(stubsOutputDir,
new String[] { STUB_MAPPING_FILE_PATTERN },
new String[] { CONTRACT_FILE_PATTERN });
}
archiver.setCompress(true);
archiver.setDestFile(stubsJarFile);
archiver.addConfiguredManifest(ManifestCreator.createManifest(project));
archiver.createArchive();
}
catch (Exception e) {
throw new MojoFailureException(
"Exception while packaging " + classifier + " jar.", e);
}
return stubsJarFile;
}
}