private File createBar()

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;
    }