Skip to content

Commit c29b9bf

Browse files
committed
Migrate MavenTask tasks to ValueSource
All other tasks remain untouched, as they can be safely run in task execution after the fake mavens have been generated.
1 parent 1a7c280 commit c29b9bf

File tree

4 files changed

+242
-36
lines changed

4 files changed

+242
-36
lines changed

src/main/groovy/net/minecraftforge/forgedev/ForgeDevExtension.java

Lines changed: 54 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,10 @@
1313
import net.minecraftforge.forgedev.tasks.mappings.LegacyApplyMappings;
1414
import net.minecraftforge.forgedev.tasks.mappings.LegacyGenerateSRG;
1515
import net.minecraftforge.forgedev.tasks.mcp.MavenizerMCPDataTask;
16-
import net.minecraftforge.forgedev.tasks.mcp.MavenizerMCPMaven;
16+
import net.minecraftforge.forgedev.tasks.mcp.MavenizerMCPMavenValue;
1717
import net.minecraftforge.forgedev.tasks.mcp.MavenizerMCPSetup;
1818
import net.minecraftforge.forgedev.tasks.mcp.MavenizerRawArtifact;
19-
import net.minecraftforge.forgedev.tasks.mcp.MavenizerSyncMappings;
19+
import net.minecraftforge.forgedev.tasks.mcp.MavenizerSyncMappingsValue;
2020
import net.minecraftforge.forgedev.tasks.obfuscation.LegacyReobfuscateJar;
2121
import net.minecraftforge.forgedev.tasks.patching.binary.CreateBinPatches;
2222
import net.minecraftforge.forgedev.tasks.patching.diff.ApplyPatches;
@@ -114,9 +114,6 @@ private void setup(ForgeDevPlugin plugin, Project project) {
114114
var downloadClientMappings = tasks.register("downloadClientMappings", DownloadMappings.class, task -> task.getSide().set("client"));
115115
var downloadServerMappings = tasks.register("downloadServerMappings", DownloadMappings.class, task -> task.getSide().set("server"));
116116

117-
var syncMavenizer = Util.runFirst(project, tasks.register("syncMavenizer", MavenizerMCPMaven.class));
118-
var syncMavenizerForExtra = Util.runFirst(project, tasks.register("syncMavenizerForExtra", MavenizerMCPMaven.class));
119-
var syncMappingsMaven = Util.runFirst(project, tasks.register("syncMappingsMaven", MavenizerSyncMappings.class));
120117
var minecraftDepsConfiguration = project.getConfigurations().detachedConfiguration();
121118
var mappingsConfiguration = project.getConfigurations().detachedConfiguration();
122119

@@ -137,8 +134,6 @@ private void setup(ForgeDevPlugin plugin, Project project) {
137134
});
138135

139136
var toMCPConfig = tasks.register("srg2mcp", LegacyApplyMappings.class, task -> {
140-
task.dependsOn(syncMappingsMaven);
141-
142137
task.getInput().set(applyPatches.flatMap(ApplyPatches::getOutput));
143138
task.getMappings().setFrom(mappingsConfiguration);
144139
task.getLambdas().set(false);
@@ -205,8 +200,6 @@ private void setup(ForgeDevPlugin plugin, Project project) {
205200
});
206201

207202
var reobfJar = tasks.register("reobfJar", LegacyReobfuscateJar.class, task -> {
208-
task.dependsOn(syncMavenizer);
209-
210203
task.getInput().set(jar.flatMap(Jar::getArchiveFile));
211204
task.getLibraries().from(minecraftDepsConfiguration);
212205
task.getOutput().convention(task.getDefaultOutputFile());
@@ -304,31 +297,60 @@ private void setup(ForgeDevPlugin plugin, Project project) {
304297
// TODO Add mappings as a dependency to FG7???
305298
// Add mappings so that it can be used by reflection tools.
306299
// net.minecraft:mappings_CHANNEL:VERSION@zip
307-
var mappingsDependency = project.getDependencies().create(
308-
"net.minecraft:mappings_%s:%s@zip".formatted(legacyPatcher.getMappingChannel().get(), legacyPatcher.getMappingVersion().get())
309-
);
310-
var minecraftDependency = project.getDependencies().create(
311-
"net.minecraft:joined:%s".formatted(legacyMcp.getVersion().get()),
312-
Closures.<ExternalModuleDependency>consumer(dependency -> {
313-
dependency.attributes(a -> {
314-
a.attributeProvider(OS, getProviders().of(OSValueSource.class, spec -> { }));
315-
a.attributeProvider(MAPPINGS_CHANNEL, legacyPatcher.getMappingChannel());
316-
a.attributeProvider(MAPPINGS_VERSION, legacyPatcher.getMappingVersion());
317-
});
318-
})
300+
var mappingsDependency = getProviders().zip(
301+
getProviders().of(MavenizerSyncMappingsValue.class, spec -> spec.parameters(parameters -> {
302+
parameters.init(plugin, problems);
303+
parameters.getOutput().set(mavenizerRepo);
304+
parameters.getVersion().set(legacyPatcher.getMappingVersion());
305+
})),
306+
getProviders().zip(legacyPatcher.getMappingChannel(), legacyPatcher.getMappingVersion(), (c, v) -> c + ':' + v),
307+
(ret, version) -> {
308+
return project.getDependencies().create(
309+
"net.minecraft:mappings_%s@zip".formatted(version)
310+
);
311+
});
312+
var minecraftDependency = getProviders().zip(
313+
getProviders().of(MavenizerMCPMavenValue.class, spec -> spec.parameters(parameters -> {
314+
parameters.init(plugin, problems);
315+
parameters.getOutput().set(mavenizerRepo);
316+
parameters.getArtifact().set(legacyMcp.getVersion());
317+
})),
318+
legacyMcp.getVersion(),
319+
(ret, version) -> {
320+
return project.getDependencies().create(
321+
"net.minecraft:joined:" + version,
322+
Closures.<ExternalModuleDependency>consumer(dependency -> {
323+
dependency.attributes(a -> {
324+
a.attributeProvider(OS, getProviders().of(OSValueSource.class, spec -> { }));
325+
a.attributeProvider(MAPPINGS_CHANNEL, legacyPatcher.getMappingChannel());
326+
a.attributeProvider(MAPPINGS_VERSION, legacyPatcher.getMappingVersion());
327+
});
328+
})
329+
);
330+
}
319331
);
320-
var minecraftExtraDependency = project.getDependencies().create(
321-
"net.minecraft:client-extra:%s".formatted(legacyMcp.getVersion().get()),
322-
Closures.<ExternalModuleDependency>consumer(dependency -> dependency.setTransitive(false))
332+
var minecraftExtraDependency = getProviders().zip(
333+
getProviders().of(MavenizerMCPMavenValue.class, spec -> spec.parameters(parameters -> {
334+
parameters.init(plugin, problems);
335+
parameters.getOutput().set(mavenizerRepo);
336+
parameters.getArtifact().set(legacyMcp.getVersion().map(v -> "net.minecraft:client-extra:" + v));
337+
})),
338+
legacyMcp.getVersion(),
339+
(ret, version) -> {
340+
return project.getDependencies().create(
341+
"net.minecraft:client-extra:" + version,
342+
Closures.<ExternalModuleDependency>consumer(dependency -> dependency.setTransitive(false))
343+
);
344+
}
323345
);
324-
syncMavenizer.configure(task -> task.getArtifact().set(legacyMcp.getVersion()));
325-
syncMavenizerForExtra.configure(task -> task.getArtifact().set(legacyMcp.getVersion().map(v -> "net.minecraft:client-extra:" + v)));
326-
syncMappingsMaven.configure(task -> task.getVersion().set(legacyPatcher.getMappingVersion()));
327-
project.getDependencies().add(JavaPlugin.IMPLEMENTATION_CONFIGURATION_NAME, minecraftDependency);
328-
project.getDependencies().add(JavaPlugin.IMPLEMENTATION_CONFIGURATION_NAME, minecraftExtraDependency);
329-
project.getDependencies().add(JavaPlugin.IMPLEMENTATION_CONFIGURATION_NAME, mappingsDependency);
330-
minecraftDepsConfiguration.withDependencies(d -> d.add(minecraftDependency));
331-
mappingsConfiguration.withDependencies(d -> d.add(mappingsDependency));
346+
//syncMavenizer.configure(task -> task.getArtifact().set(legacyMcp.getVersion()));
347+
//syncMavenizerForExtra.configure(task -> task.getArtifact().set(legacyMcp.getVersion().map(v -> "net.minecraft:client-extra:" + v)));
348+
//syncMappingsMaven.configure(task -> task.getVersion().set(legacyPatcher.getMappingVersion()));
349+
project.getDependencies().addProvider(JavaPlugin.IMPLEMENTATION_CONFIGURATION_NAME, minecraftDependency);
350+
project.getDependencies().addProvider(JavaPlugin.IMPLEMENTATION_CONFIGURATION_NAME, minecraftExtraDependency);
351+
project.getDependencies().addProvider(JavaPlugin.IMPLEMENTATION_CONFIGURATION_NAME, mappingsDependency);
352+
minecraftDepsConfiguration.withDependencies(d -> d.addLater(minecraftDependency));
353+
mappingsConfiguration.withDependencies(d -> d.addLater(mappingsDependency));
332354

333355
// Add the patched source as a source dir during afterEvaluate, to not be overwritten by buildscripts
334356
main.configure(s -> s.getJava().srcDir(legacyPatcher.getPatchedSrc()));
@@ -365,8 +387,6 @@ private void setup(ForgeDevPlugin plugin, Project project) {
365387
//filterNew.configure(task -> task.getBlacklist().from(jar.flatMap(AbstractArchiveTask::getArchiveFile)));
366388

367389
tasks.withType(LegacyGenerateSRG.class, task -> {
368-
task.dependsOn(syncMappingsMaven);
369-
370390
task.getMappings().setFrom(mappingsConfiguration);
371391
});
372392

@@ -455,8 +475,6 @@ private void setup(ForgeDevPlugin plugin, Project project) {
455475
} else {
456476
// Remap the 'clean' with out mappings.
457477
TaskProvider<LegacyApplyMappings> toMCPClean = tasks.register("srg2mcpClean", LegacyApplyMappings.class, task -> {
458-
task.dependsOn(syncMappingsMaven);
459-
460478
task.getInput().set(legacyPatcher.getCleanSrc());
461479
task.getMappings().setFrom(mappingsConfiguration);
462480
task.getLambdas().set(false);
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
/*
2+
* Copyright (c) Forge Development LLC and contributors
3+
* SPDX-License-Identifier: LGPL-2.1-only
4+
*/
5+
package net.minecraftforge.forgedev.tasks.mcp;
6+
7+
import org.gradle.api.file.DirectoryProperty;
8+
import org.gradle.api.provider.Property;
9+
10+
import javax.inject.Inject;
11+
import java.util.List;
12+
13+
public abstract class MavenizerMCPMavenValue extends MavenizerValueSource<Integer, MavenizerMCPMavenValue.Parameters> {
14+
public interface Parameters extends MavenizerValueSource.Parameters {
15+
Property<String> getArtifact();
16+
17+
DirectoryProperty getOutput();
18+
}
19+
20+
@Override
21+
protected void addArguments(List<String> args) {
22+
super.addArguments(args);
23+
24+
var parameters = getParameters();
25+
args.addAll(List.of(
26+
"--maven", "--global-auxiliary-variants", "--dependencies-only",
27+
"--output", parameters.getOutput().get().getAsFile().getAbsolutePath()
28+
));
29+
30+
var artifact = parameters.getArtifact().get();
31+
if (artifact.indexOf(':') < 0) {
32+
args.addAll(List.of(
33+
"--artifact", "net.minecraft:joined",
34+
"--version", artifact
35+
));
36+
} else {
37+
args.addAll(List.of(
38+
"--artifact", artifact
39+
));
40+
}
41+
}
42+
43+
@Override
44+
public Integer obtain() {
45+
return this.exec();
46+
}
47+
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
/*
2+
* Copyright (c) Forge Development LLC and contributors
3+
* SPDX-License-Identifier: LGPL-2.1-only
4+
*/
5+
package net.minecraftforge.forgedev.tasks.mcp;
6+
7+
import net.minecraftforge.gradleutils.shared.Tool;
8+
import org.gradle.api.file.DirectoryProperty;
9+
import org.gradle.api.provider.Property;
10+
11+
import javax.inject.Inject;
12+
import java.util.List;
13+
14+
public abstract class MavenizerSyncMappingsValue extends MavenizerValueSource<Integer, MavenizerSyncMappingsValue.Parameters> {
15+
public interface Parameters extends MavenizerValueSource.Parameters {
16+
Property<String> getVersion();
17+
18+
Property<String> getParchmentVersion();
19+
20+
DirectoryProperty getOutput();
21+
}
22+
23+
//net.minecraft:mappings_channel:version@zip
24+
//--maven --artifact net.minecraft:mappings --version 1.21.7
25+
@Override
26+
protected void addArguments(List<String> args) {
27+
super.addArguments(args);
28+
29+
var parameters = getParameters();
30+
args.addAll(List.of(
31+
"--maven",
32+
"--output", parameters.getOutput().get().getAsFile().getAbsolutePath(),
33+
"--artifact", "net.minecraft:mappings",
34+
"--version", parameters.getVersion().get()
35+
));
36+
37+
if (parameters.getParchmentVersion().isPresent()) {
38+
args.add("--parchment");
39+
args.add(parameters.getParchmentVersion().get());
40+
}
41+
}
42+
43+
@Override
44+
public Integer obtain() {
45+
return this.exec();
46+
}
47+
}
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
/*
2+
* Copyright (c) Forge Development LLC and contributors
3+
* SPDX-License-Identifier: LGPL-2.1-only
4+
*/
5+
package net.minecraftforge.forgedev.tasks.mcp;
6+
7+
import net.minecraftforge.forgedev.ForgeDevPlugin;
8+
import net.minecraftforge.forgedev.ForgeDevProblems;
9+
import net.minecraftforge.forgedev.Tools;
10+
import net.minecraftforge.gradleutils.shared.Tool;
11+
import org.gradle.api.file.ConfigurableFileCollection;
12+
import org.gradle.api.file.DirectoryProperty;
13+
import org.gradle.api.logging.Logger;
14+
import org.gradle.api.logging.Logging;
15+
import org.gradle.api.model.ObjectFactory;
16+
import org.gradle.api.provider.ListProperty;
17+
import org.gradle.api.provider.Property;
18+
import org.gradle.api.provider.ValueSource;
19+
import org.gradle.api.provider.ValueSourceParameters;
20+
import org.gradle.process.ExecOperations;
21+
22+
import javax.inject.Inject;
23+
import java.util.ArrayList;
24+
import java.util.List;
25+
import java.util.Locale;
26+
27+
abstract class MavenizerValueSource<T, P extends MavenizerValueSource.Parameters> implements ValueSource<T, P> {
28+
interface Parameters extends ValueSourceParameters {
29+
default void init(ForgeDevPlugin plugin, ForgeDevProblems problems) {
30+
var tool = plugin.getTool(Tools.MAVENIZER);
31+
32+
getClasspath().convention(tool.getClasspath());
33+
getJavaLauncher().convention(tool.getJavaLauncher().map(j -> j.getExecutablePath().getAsFile().getAbsolutePath()));
34+
getCaches().convention(plugin.globalCaches().dir(tool.getName().toLowerCase(Locale.ENGLISH) + "/cache").map(problems.ensureFileLocation()));
35+
}
36+
37+
Property<String> getName();
38+
39+
ConfigurableFileCollection getClasspath();
40+
41+
Property<String> getJavaLauncher();
42+
43+
DirectoryProperty getCaches();
44+
}
45+
46+
private static final Logger LOGGER = Logging.getLogger(MavenizerValueSource.class);
47+
48+
protected abstract @Inject ExecOperations getExecOperations();
49+
50+
@Inject
51+
public MavenizerValueSource() { }
52+
53+
protected int exec() {
54+
return this.getExecOperations().javaexec(spec -> {
55+
var params = this.getParameters();
56+
spec.setClasspath(params.getClasspath());
57+
spec.setExecutable(params.getJavaLauncher().get());
58+
{
59+
var args = new ArrayList<String>();
60+
this.addArguments(args);
61+
spec.setArgs(args);
62+
}
63+
64+
LOGGER.info("Executing Mavenizer: ");
65+
var itr = params.getClasspath().iterator();
66+
LOGGER.info(" Classpath: {}", itr.next().getAbsolutePath());
67+
while (itr.hasNext())
68+
LOGGER.info(" {}", itr.next().getAbsolutePath());
69+
70+
LOGGER.info(" Java: {}", params.getJavaLauncher().get());
71+
var args = spec.getArgs();
72+
var prefix = " Arguments: ";
73+
for (int x = 0; x < args.size(); x++) {
74+
var current = args.get(x);
75+
var next = args.size() > x + 1 ? args.get(x + 1) : null;
76+
var line = current;
77+
if (current.startsWith("--") && next != null && !next.startsWith("--")) {
78+
x++;
79+
line += ' ' + next;
80+
}
81+
LOGGER.info("{}{}", prefix, line);
82+
prefix = " ";
83+
}
84+
}).rethrowFailure().assertNormalExitValue().getExitValue();
85+
}
86+
87+
protected void addArguments(List<String> args) {
88+
var parameters = getParameters();
89+
args.addAll(List.of(
90+
"--cache", parameters.getCaches().get().getAsFile().getAbsolutePath(),
91+
"--jdk-cache", parameters.getCaches().dir("jdks").get().getAsFile().getAbsolutePath()
92+
));
93+
}
94+
}

0 commit comments

Comments
 (0)