Skip to content

Commit 12b9c76

Browse files
committed
Generate transformed jar in order
1 parent 38b387c commit 12b9c76

File tree

1 file changed

+9
-3
lines changed

1 file changed

+9
-3
lines changed

core/deployment/src/main/java/io/quarkus/deployment/pkg/steps/JarResultBuildStep.java

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import java.util.HashSet;
3737
import java.util.List;
3838
import java.util.Map;
39+
import java.util.Map.Entry;
3940
import java.util.Optional;
4041
import java.util.Set;
4142
import java.util.function.BiPredicate;
@@ -64,6 +65,7 @@
6465
import io.quarkus.deployment.builditem.MainClassBuildItem;
6566
import io.quarkus.deployment.builditem.QuarkusBuildCloseablesBuildItem;
6667
import io.quarkus.deployment.builditem.TransformedClassesBuildItem;
68+
import io.quarkus.deployment.builditem.TransformedClassesBuildItem.TransformedClass;
6769
import io.quarkus.deployment.configuration.ClassLoadingConfig;
6870
import io.quarkus.deployment.pkg.JarUnsigner;
6971
import io.quarkus.deployment.pkg.PackageConfig;
@@ -648,9 +650,13 @@ private JarBuildItem buildThinJar(CurateOutcomeBuildItem curateOutcomeBuildItem,
648650
Path transformedZip = quarkus.resolve(TRANSFORMED_BYTECODE_JAR);
649651
fastJarJarsBuilder.setTransformed(transformedZip);
650652
try (FileSystem out = createNewReproducibleZipFileSystem(transformedZip, packageConfig)) {
651-
for (Set<TransformedClassesBuildItem.TransformedClass> transformedSet : transformedClasses
652-
.getTransformedClassesByJar().values()) {
653-
for (TransformedClassesBuildItem.TransformedClass transformed : transformedSet) {
653+
// we make sure the entries are added in a reproducible order
654+
// we use Path#toString() to get a reproducible order on both Unix-based OSes and Windows
655+
for (Entry<Path, Set<TransformedClass>> transformedClassEntry : transformedClasses
656+
.getTransformedClassesByJar().entrySet().stream()
657+
.sorted(Comparator.comparing(e -> e.getKey().toString())).toList()) {
658+
for (TransformedClass transformed : transformedClassEntry.getValue().stream()
659+
.sorted(Comparator.comparing(TransformedClass::getFileName)).toList()) {
654660
Path target = out.getPath(transformed.getFileName());
655661
if (transformed.getData() != null) {
656662
if (target.getParent() != null) {

0 commit comments

Comments
 (0)