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