Skip to content

Commit f6b5805

Browse files
committed
jar merging improvements
- fix the bundler not being included - add feedback message - make MC depend on distmarker
1 parent 671095d commit f6b5805

File tree

3 files changed

+72
-34
lines changed

3 files changed

+72
-34
lines changed

plugin/src/main/java/fish/cichlidmc/cichlid_gradle/cache/mcmaven/MinecraftMaven.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,7 @@ private static Request extractRequest(URI uri) {
216216
}
217217
}
218218

219-
logger.quiet("Intercepted request for Minecraft definition {}, {}, {}", defName, artifact, hashAlgorithm);
219+
logger.debug("Intercepted request for Minecraft definition {}, {}, {}", defName, artifact, hashAlgorithm);
220220

221221
return new Request(dist, version1, version, defName, hash, artifact, Optional.ofNullable(hashAlgorithm));
222222
}

plugin/src/main/java/fish/cichlidmc/cichlid_gradle/cache/mcmaven/PomGenerator.java

Lines changed: 36 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,14 @@
99
import fish.cichlidmc.pistonmetaparser.version.library.Classifier;
1010
import fish.cichlidmc.pistonmetaparser.version.library.Library;
1111
import fish.cichlidmc.pistonmetaparser.version.library.Natives;
12+
import org.jetbrains.annotations.Nullable;
1213

1314
import java.io.IOException;
1415
import java.nio.file.Path;
1516
import java.util.ArrayList;
1617
import java.util.List;
1718
import java.util.Optional;
19+
import java.util.stream.Collectors;
1820
import java.util.stream.Stream;
1921

2022
public final class PomGenerator {
@@ -26,10 +28,25 @@ public static void generate(FullVersion version, Distribution dist, Path output)
2628
new XmlBuilder.XmlElement("groupId", "net.minecraft"),
2729
new XmlBuilder.XmlElement("artifactId", "minecraft-" + dist.name),
2830
new XmlBuilder.XmlElement("version", VERSION_PLACEHOLDER),
29-
new XmlBuilder.XmlElement("dependencies", version.libraries.stream().flatMap(PomGenerator::makeDependencyElements).toList())
31+
new XmlBuilder.XmlElement("dependencies", makeDependencyElements(version, dist))
3032
))).write(output);
3133
}
3234

35+
private static List<XmlBuilder.XmlElement> makeDependencyElements(FullVersion version, Distribution dist) {
36+
List<XmlBuilder.XmlElement> elements = version.libraries.stream()
37+
.flatMap(PomGenerator::makeDependencyElements)
38+
// explicitly collect to a mutable list
39+
.collect(Collectors.toCollection(ArrayList::new));
40+
41+
// when merged, add a dependency on distmarker
42+
if (dist == Distribution.MERGED) {
43+
// I don't mind hardcoding this version here because it will hopefully never be updated again
44+
elements.add(makeDependencyElement("fish.cichlidmc", "distribution-marker", "1.0.1", null));
45+
}
46+
47+
return elements;
48+
}
49+
3350
private static Stream<XmlBuilder.XmlElement> makeDependencyElements(Library library) {
3451
// check rules first
3552
if (!Rule.test(library.rules, Features.EMPTY))
@@ -38,13 +55,13 @@ private static Stream<XmlBuilder.XmlElement> makeDependencyElements(Library libr
3855
List<XmlBuilder.XmlElement> elements = new ArrayList<>();
3956
Optional<Artifact> artifact = library.artifact;
4057
if (artifact.isPresent()) {
41-
elements.add(makeDependencyXml(library.name));
58+
elements.add(makeDependencyElement(library.name));
4259
}
4360

4461
Optional<Classifier> classifier = library.natives.flatMap(Natives::choose);
4562
if (classifier.isPresent()) {
4663
String notation = library.name + ':' + classifier.get().name;
47-
elements.add(makeDependencyXml(notation));
64+
elements.add(makeDependencyElement(notation));
4865
}
4966

5067
if (elements.isEmpty()) {
@@ -54,17 +71,24 @@ private static Stream<XmlBuilder.XmlElement> makeDependencyElements(Library libr
5471
return elements.stream();
5572
}
5673

57-
private static XmlBuilder.XmlElement makeDependencyXml(String notation) {
74+
private static XmlBuilder.XmlElement makeDependencyElement(String notation) {
5875
String[] split = notation.split(":");
59-
XmlBuilder.XmlElement element = new XmlBuilder.XmlElement("dependency", new ArrayList<>(List.of(
60-
new XmlBuilder.XmlElement("groupId", split[0]),
61-
new XmlBuilder.XmlElement("artifactId", split[1]),
62-
new XmlBuilder.XmlElement("version", split[2]),
76+
String classifier = split.length > 3 ? split[3] : null;
77+
return makeDependencyElement(split[0], split[1], split[2], classifier);
78+
}
79+
80+
private static XmlBuilder.XmlElement makeDependencyElement(String group, String artifact, String version, @Nullable String classifier) {
81+
List<XmlBuilder.XmlElement> children = new ArrayList<>(List.of(
82+
new XmlBuilder.XmlElement("groupId", group),
83+
new XmlBuilder.XmlElement("artifactId", artifact),
84+
new XmlBuilder.XmlElement("version", version),
6385
new XmlBuilder.XmlElement("scope", "compile")
64-
)));
65-
if (split.length > 3) {
66-
element.children().add(new XmlBuilder.XmlElement("classifier", split[3]));
86+
));
87+
88+
if (classifier != null) {
89+
children.add(new XmlBuilder.XmlElement("classifier", classifier));
6790
}
68-
return element;
91+
92+
return new XmlBuilder.XmlElement("dependency", children);
6993
}
7094
}

plugin/src/main/java/fish/cichlidmc/cichlid_gradle/cache/task/impl/MergeTask.java

Lines changed: 35 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,14 @@
77
import fish.cichlidmc.cichlid_gradle.merge.MergeSource;
88
import fish.cichlidmc.cichlid_gradle.util.Distribution;
99
import fish.cichlidmc.distmarker.Dist;
10+
import org.jetbrains.annotations.Nullable;
1011

1112
import java.io.IOException;
1213
import java.nio.file.Files;
1314
import java.nio.file.Path;
1415
import java.util.ArrayList;
1516
import java.util.List;
17+
import java.util.Objects;
1618
import java.util.concurrent.CompletableFuture;
1719

1820
public class MergeTask extends CacheTask {
@@ -24,28 +26,40 @@ public MergeTask(CacheTaskEnvironment env) {
2426
protected String run() throws IOException {
2527
JarsStorage jars = this.env.cache.getVersion(this.env.version.id).jars;
2628

27-
List<CompletableFuture<MergeSource>> futures = new ArrayList<>();
28-
29-
for (Dist dist : Dist.values()) {
30-
Path jar = jars.get(dist);
31-
if (Files.exists(jar)) {
32-
futures.add(CompletableFuture.completedFuture(new MergeSource(dist, jar)));
33-
} else {
34-
Distribution distribution = switch (dist) {
35-
case CLIENT -> Distribution.CLIENT;
36-
case SERVER -> Distribution.SERVER;
37-
default -> null;
38-
};
39-
40-
if (distribution != null) {
41-
CacheTaskEnvironment env = this.env.withDist(distribution);
42-
futures.add(env.submit(SetupTask::new).thenApply($ -> MergeSource.createUnchecked(dist, jar)));
43-
}
44-
}
45-
}
29+
List<CompletableFuture<@Nullable MergeSource>> futures = new ArrayList<>();
30+
31+
futures.add(this.createFuture(Distribution.CLIENT, jars));
32+
CompletableFuture<MergeSource> server = this.createFuture(Distribution.SERVER, jars);
33+
futures.add(server);
34+
35+
// need to wait for the server to be done before checking for the bundler
36+
futures.add(server.thenApply(ignored -> {
37+
Path bundler = jars.get(Dist.BUNDLER);
38+
return Files.exists(bundler) ? MergeSource.createUnchecked(Dist.BUNDLER, bundler) : null;
39+
}));
40+
41+
List<MergeSource> sources = futures.stream()
42+
.map(CompletableFuture::join)
43+
.filter(Objects::nonNull)
44+
.toList();
4645

47-
List<MergeSource> sources = futures.stream().map(CompletableFuture::join).toList();
4846
JarMerger.merge(sources, jars.get(Distribution.MERGED));
49-
return null;
47+
return "Merged " + sources.size() + " sources: " + sources;
48+
}
49+
50+
private CompletableFuture<MergeSource> createFuture(Distribution dist, JarsStorage jars) throws IOException {
51+
Dist asMarkerDist = switch (dist) {
52+
case CLIENT -> Dist.CLIENT;
53+
case SERVER -> Dist.SERVER;
54+
case MERGED -> throw new IllegalArgumentException("MERGED is not allowed");
55+
};
56+
57+
Path jar = jars.get(dist);
58+
if (Files.exists(jar)) {
59+
return CompletableFuture.completedFuture(new MergeSource(asMarkerDist, jar));
60+
} else {
61+
CacheTaskEnvironment env = this.env.withDist(dist);
62+
return env.submit(SetupTask::new).thenApply($ -> MergeSource.createUnchecked(asMarkerDist, jar));
63+
}
5064
}
5165
}

0 commit comments

Comments
 (0)