package org.jolokia.docker.maven;
import java.io.File;
import org.apache.maven.archiver.MavenArchiveConfiguration;
import org.apache.maven.execution.MavenSession;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugins.annotations.*;
import org.apache.maven.project.MavenProject;
import org.apache.maven.shared.filtering.MavenFileFilter;
import org.jolokia.docker.maven.access.DockerAccess;
import org.jolokia.docker.maven.access.DockerAccessException;
import org.jolokia.docker.maven.assembly.DockerArchiveCreator;
import org.jolokia.docker.maven.config.BuildImageConfiguration;
import org.jolokia.docker.maven.config.ImageConfiguration;
import org.jolokia.docker.maven.util.MojoParameters;
/**
* Mojo for building a data image
*
* @author roland
* @since 28.07.14
*/
@Mojo(name = "build", defaultPhase = LifecyclePhase.INSTALL)
public class BuildMojo extends AbstractDockerMojo {
// ==============================================================================================================
// Parameters required from Maven when building an assembly. They cannot be injected directly
// into DockerAssemblyCreator.
// See also here: http://maven.40175.n5.nabble.com/Mojo-Java-1-5-Component-MavenProject-returns-null-vs-JavaDoc-parameter-expression-quot-project-quot-s-td5733805.html
@Parameter
private MavenArchiveConfiguration archive;
@Component
private MavenSession session;
@Component
private MavenFileFilter mavenFileFilter;
@Component
protected MavenProject project;
@Component
private DockerArchiveCreator dockerArchiveCreator;
@Override
protected void executeInternal(DockerAccess dockerAccess) throws DockerAccessException, MojoExecutionException {
for (ImageConfiguration imageConfig : getImages()) {
BuildImageConfiguration buildConfig = imageConfig.getBuildConfiguration();
if (buildConfig != null) {
buildImage(imageConfig, dockerAccess);
}
}
}
private void buildImage(ImageConfiguration imageConfig, DockerAccess dockerAccess)
throws DockerAccessException, MojoExecutionException {
MojoParameters params = new MojoParameters(session, project, archive, mavenFileFilter);
File dockerArchive = dockerArchiveCreator.create(params, imageConfig.getBuildConfiguration());
String imageName = getImageName(imageConfig.getName());
info("Creating image " + getImageDescription(imageName,imageConfig.getAlias()));
dockerAccess.buildImage(imageName, dockerArchive);
}
}