package de.saumya.mojo.jruby9;
import java.io.File;
import java.io.IOException;
import org.apache.maven.artifact.Artifact;
import org.apache.maven.model.Resource;
import org.apache.maven.plugins.annotations.Parameter;
import org.apache.maven.plugin.MojoExecutionException;
import de.saumya.mojo.jruby9.JarDependencies.Filter;
import de.saumya.mojo.ruby.script.ScriptException;
/**
* setup the jars in jruby way:
*
* <li>copy the jars into a local repo inside the jar under the 'jars' directory</li>
* <li>create 'Jars.lock' which jruby uses to load the jars</li>
*
* <br/>
*
* setup the gems
*
* <li>copy the 'gems' directory to the resources</li>
* <li>copy the 'specifications' directory to the resources</li>
* <li>copy the 'bin' directory to the resources</li>
*
*
* @author christian
*
*/
public abstract class AbstractGenerateMojo extends AbstractJRuby9Mojo {
protected void executeWithGems(boolean pluginDependenciesOnly) throws MojoExecutionException,
ScriptException, IOException {
JarDependencies jars = new JarDependencies(project.getBuild().getOutputDirectory(), "Jars.lock");
jars.addAll(plugin.getArtifacts(), new Filter(){
@Override
public boolean addIt(Artifact a) {
return a.getScope().equals("runtime") &&
!project.getArtifactMap().containsKey(a.getGroupId() +":" + a.getArtifactId());
}
});
if (!pluginDependenciesOnly) {
jars.addAll(project.getArtifacts());
}
jars.generateJarsLock();
jars.copyJars();
File pluginGemHome = gemHome( gemsBasePath(), plugin.getArtifactId() );
addResource(project.getResources(), createGemsResource(pluginGemHome.getAbsolutePath()));
addResource(project.getResources(), createGemsResource(gemsBasePath()));
}
// TODO pull upstream
protected Resource createGemsResource(String gemHome) {
Resource resource = new Resource();
resource.setDirectory(gemHome);
resource.addInclude("bin/*");
resource.addInclude("specifications/*");
resource.addInclude("gems/**");
resource.addExclude("gems/*/test/**");
resource.addExclude("gems/*/tests/**");
resource.addExclude("gems/*/spec/**");
resource.addExclude("gems/*/specs/**");
resource.addExclude("gems/*/features/**");
resource.addExclude("gems/**/*.java");
return resource;
}
// TODO pull upstream
protected String gemsBasePath() {
String base = this.gemsConfig.getGemHome() != null ?
this.gemsConfig.getGemHome().getAbsolutePath() :
(project.getBuild().getDirectory() + "/rubygems");
return base;
}
}