public void run()

in winegrower-extension/winegrower-build/winegrower-build-common/src/main/java/org/apache/winegrower/extension/build/common/FatJar.java [45:121]


    public void run() {
        requireNonNull(configuration.jars, "Jars are not set");
        requireNonNull(configuration.output, "Output is not set").getParentFile().mkdirs();

        try (final JarOutputStream outputStream = new JarOutputStream(
                new BufferedOutputStream(new FileOutputStream(configuration.output)))) {
            final MetadataBuilder metadataBuilder = new MetadataBuilder(configuration.autoFiltering);
            byte[] buffer = new byte[8192];
            final Set<String> alreadyAdded = new HashSet<>();
            configuration.jars.forEach(shadedJar -> {
                if (shadedJar.isDirectory()) {
                    final Path root = shadedJar.toPath();
                    metadataBuilder.visitFolder(configuration.defaultArtifactName, root, new SimpleFileVisitor<Path>() {

                        @Override
                        public FileVisitResult preVisitDirectory(final Path dir, final BasicFileAttributes attrs) throws IOException {
                            outputStream.putNextEntry(new JarEntry(toPath(dir) + '/'));
                            outputStream.closeEntry();
                            return super.preVisitDirectory(dir, attrs);
                        }

                        @Override
                        public FileVisitResult visitFile(final Path file, final BasicFileAttributes attrs) throws IOException {
                            outputStream.putNextEntry(new JarEntry(toPath(file)));
                            Files.copy(file, outputStream);
                            outputStream.closeEntry();
                            return super.visitFile(file, attrs);
                        }

                        private String toPath(final Path file) {
                            return root.resolve(file).toString().replace("\\", "/");
                        }

                    });
                } else {
                    try (final JarInputStream inputStream = new JarInputStream(new BufferedInputStream(new FileInputStream(shadedJar)))) {
                        metadataBuilder.onJar(shadedJar.getName(), inputStream.getManifest());

                        ZipEntry nextEntry;
                        while ((nextEntry = inputStream.getNextEntry()) != null) {
                            final String name = nextEntry.getName();
                            if (!alreadyAdded.add(name)) {
                                continue;
                            }
                            metadataBuilder.onFile(name);
                            outputStream.putNextEntry(nextEntry);
                            int count;
                            while ((count = inputStream.read(buffer, 0, buffer.length)) >= 0) {
                                if (count > 0) {
                                    outputStream.write(buffer, 0, count);
                                }
                            }
                            outputStream.closeEntry();
                        }
                    } catch (final IOException e) {
                        throw new IllegalStateException(e);
                    }
                    metadataBuilder.afterJar();
                }
            });

            outputStream.putNextEntry(new JarEntry("WINEGROWER-INF/"));
            outputStream.closeEntry();

            metadataBuilder.getMetadata().forEach((key, value) -> {
                try {
                    outputStream.putNextEntry(new JarEntry("WINEGROWER-INF/" + key + ".properties"));
                    value.store(outputStream, "index");
                    outputStream.closeEntry();
                } catch (final IOException ioe) {
                    throw new IllegalStateException(ioe);
                }
            });
        } catch (final IOException e) {
            throw new IllegalStateException(e);
        }
    }