package de.saumya.mojo.jruby9; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import java.util.Collection; import java.util.LinkedList; import java.util.List; import org.apache.maven.artifact.Artifact; import org.codehaus.plexus.util.FileUtils; public class JarDependencies { public static interface Filter { boolean addIt(Artifact a); } static final Filter ALL_FILTER = new Filter() { @Override public boolean addIt(Artifact a) { return true; } }; private final List<Artifact> artifacts = new LinkedList<Artifact>(); private final File jarsLockFile; private final File target; public JarDependencies(String target, String jarsLockFilename) { this(new File(target), jarsLockFilename); } public JarDependencies(File target, String jarsLockFilename) { this.jarsLockFile = new File(target, jarsLockFilename); this.target = new File(target, "jars"); } public String lockFilePath() { return jarsLockFile.getAbsolutePath(); } public void add(Artifact a) { if (a.getType().equals("jar")) { artifacts.add(a); } } public void addAll(Collection<Artifact> artifacts) { addAll(artifacts, ALL_FILTER); } public void addAll(Collection<Artifact> artifacts, Filter filter) { for(Artifact a: artifacts) { if (filter.addIt(a)) { add(a); } } } public void generateJarsLock() throws IOException { jarsLockFile.getParentFile().mkdirs(); try(PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter(jarsLockFile)))) { for(Artifact a: artifacts) { out.print(a); out.println(":"); } } } public void copyJars() throws IOException { for(Artifact a: artifacts) { if (!a.getScope().equals("system")) { File targetFile = new File(target, a.getGroupId().replace('.', '/') + "/" + a.getArtifactId() + "/" + a.getVersion() + "/" + a.getArtifactId() + "-" + a.getVersion() + "." + a.getType()); FileUtils.copyFile(a.getFile(), targetFile); } } } }