package mandelbrot.ocamljava_maven_plugin.util; import java.io.File; import java.io.FileOutputStream; import java.util.Collection; import java.util.Set; import org.apache.maven.plugin.AbstractMojo; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableList; public class JarExtractor { public static int BUFFER_SIZE = 10240; private final AbstractMojo abstractMojo; public JarExtractor(final AbstractMojo abstractMojo) { this.abstractMojo = Preconditions.checkNotNull(abstractMojo); } public Collection<String> extractFiles(final String archiveFile, final String targetPath) { return extractFiles(archiveFile, targetPath, null); } public Collection<String> extractFiles(final String archiveFile, final String targetPath, final Set<String> allowedExtensions) { final ImmutableList.Builder<String> filesBuilder = ImmutableList.builder(); try { final Collection<EntryInfo> entryInfos = new JarEntryReader(abstractMojo).readEntries(archiveFile, allowedExtensions); final FileOutputStream stream = new FileOutputStream(archiveFile); for (final EntryInfo entryInfo : entryInfos) { final File moduleFile = new File(targetPath, entryInfo .getJarEntry().getName()); if (!moduleFile.exists()) { new File(moduleFile.getParent()).mkdirs(); moduleFile.createNewFile(); } filesBuilder.add(moduleFile.getPath()); final FileOutputStream outputStream = new FileOutputStream( moduleFile); outputStream.write(entryInfo.getBytes()); try { outputStream.close(); } catch (final Exception e) { abstractMojo.getLog().warn( "error processing entry: " + entryInfo, e); } } stream.close(); } catch (final Exception ex) { abstractMojo.getLog().error("Error: " + ex.getMessage(), ex); } return filesBuilder.build(); } }