package ch.sbb.maven.plugins.iib.mojos; import static org.twdata.maven.mojoexecutor.MojoExecutor.artifactId; import static org.twdata.maven.mojoexecutor.MojoExecutor.configuration; import static org.twdata.maven.mojoexecutor.MojoExecutor.element; import static org.twdata.maven.mojoexecutor.MojoExecutor.executeMojo; import static org.twdata.maven.mojoexecutor.MojoExecutor.executionEnvironment; import static org.twdata.maven.mojoexecutor.MojoExecutor.goal; import static org.twdata.maven.mojoexecutor.MojoExecutor.groupId; import static org.twdata.maven.mojoexecutor.MojoExecutor.name; import static org.twdata.maven.mojoexecutor.MojoExecutor.plugin; import static org.twdata.maven.mojoexecutor.MojoExecutor.version; import java.io.File; import java.io.IOException; import org.apache.maven.execution.MavenSession; import org.apache.maven.plugin.AbstractMojo; import org.apache.maven.plugin.BuildPluginManager; 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.Mojo; import org.apache.maven.plugins.annotations.Parameter; import org.apache.maven.plugins.annotations.ResolutionScope; import org.apache.maven.project.MavenProject; import org.codehaus.plexus.util.FileUtils; /** * Copies the dependencies into a directory for packaging later * * Implemented with help from: https://github.com/TimMoore/mojo-executor/blob/master/README.md * * requiresDependencyResolution below is required for the unpack-dependencies goal to work correctly. See https://github.com/TimMoore/mojo-executor/issues/3 */ @Mojo(name = "prepare-iib-classloader-packaging", requiresDependencyResolution = ResolutionScope.TEST) public class PrepareIibClassloaderPackagingMojo extends AbstractMojo { /** * The Maven Project Object */ @Parameter(property = "project", required = true, readonly = true) protected MavenProject project; /** * The Maven Session Object */ @Parameter(property = "session", required = true, readonly = true) protected MavenSession session; /** * The Maven PluginManager Object */ @Component protected BuildPluginManager buildPluginManager; /** * The path where the classloader jars will be copied to for packaging later. */ @Parameter(property = "iib.classloaderPath", defaultValue = "${project.build.directory}/iib/classloader", required = true, readonly = true) protected File classloaderPath; public void execute() throws MojoExecutionException, MojoFailureException { // mvn // org.apache.maven.plugins:maven-dependency-plugin:2.1:copy-dependencies // -DoutputDirectory=${project.build.directory}/iib/classloader getLog().info("Emptying " + new File(project.getBuild().getDirectory(), "iib").getAbsolutePath()); try { FileUtils.deleteDirectory(new File(project.getBuild().getDirectory(), "iib")); } catch (IOException e) { // ignore } executeMojo(plugin(groupId("org.apache.maven.plugins"), artifactId("maven-dependency-plugin"), version("2.8")), goal("copy-dependencies"), configuration(element(name("outputDirectory"), classloaderPath.getAbsolutePath()), element(name("includeScope"), "runtime"), element(name("includeTypes"), "jar")), executionEnvironment(project, session, buildPluginManager)); // delete the dependency-maven-plugin-markers directory try { FileUtils.deleteDirectory(new File(project.getBuild().getDirectory(), "dependency-maven-plugin-markers")); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }