in tools/maven-plugin/src/main/java/org/apache/batchee/tools/maven/BarMojo.java [122:220]
private File createBar() throws MojoExecutionException {
final File target = new File(outputDirectory, finalName + (classifier != null ? classifier : "") + ".bar");
// lib/*
try {
for (final Artifact dependency : resolver.resolve(project, asList("compile", "runtime", "system"), session)) {
if ("provided".equals(dependency.getScope())) { // not sure why compile triggers provided using resolver
continue;
}
jarArchiver.addFile(dependency.getFile(), "BATCH-INF/lib/" + artifactPath(dependency));
}
} catch (final Exception e) {
throw new MojoExecutionException(e.getMessage(), e);
}
// classes
if (classes.isDirectory()) {
final FileSelector classesSelector = new FileSelector() {
@Override
public boolean isSelected(final FileInfo fileInfo) throws IOException {
return !JOB_SELECTOR.isSelected(fileInfo);
}
};
final DefaultFileSet fileSet = new DefaultFileSet();
fileSet.setDirectory(classes);
fileSet.setIncludingEmptyDirectories(false);
fileSet.setPrefix("BATCH-INF/classes/");
fileSet.setFileSelectors(new FileSelector[]{classesSelector});
jarArchiver.addFileSet(fileSet);
fileSet.setPrefix("BATCH-INF/");
fileSet.setFileSelectors(new FileSelector[]{JOB_SELECTOR});
jarArchiver.addFileSet(fileSet);
}
final MavenArchiveConfiguration archiveConfiguration = new MavenArchiveConfiguration();
archiveConfiguration.setAddMavenDescriptor(mavenDescriptors);
final MavenArchiver archiver = new MavenArchiver();
archiver.setOutputFile(target);
archiver.setArchiver(new JarArchiver() {
{
archiveType = "bar";
}
@Override
public void addFile( final File inputFile, final String destFileName ) throws ArchiverException {
jarArchiver.addFile(inputFile, destFileName);
}
@Override
public ResourceIterator getResources() throws ArchiverException {
final Iterator<ResourceIterator> iterators = asList(jarArchiver.getResources(), super.getResources()).iterator();
return new ResourceIterator() {
private ResourceIterator ri = iterators.next();
@Override
public boolean hasNext() {
if (ri.hasNext()) {
return true;
} else if (iterators.hasNext()) {
ri = iterators.next();
}
return ri.hasNext();
}
@Override
public ArchiveEntry next() {
final ArchiveEntry next = ri.next();
final PlexusIoResource resource = next.getResource();
if (resource != null && PlexusIoFileResource.class.isInstance(resource)) {
final File file = PlexusIoFileResource.class.cast(resource).getFile();
final String name = next.getName();
if (JOB_SELECTOR.accept(resource.getName())) {
return ArchiveEntry.createEntry(name.replace(File.separatorChar, '/').replaceFirst("META\\-INF/", ""), file, next.getType(), next.getMode());
}
}
return next;
}
@Override
public void remove() {
throw new UnsupportedOperationException();
}
};
}
});
try {
archiver.createArchive(session, project, archiveConfiguration);
} catch (final Exception e) {
throw new MojoExecutionException(e.getMessage(), e);
}
return target;
}