Exclude client only libraries in server run task.
parent
15afb45769
commit
03d3950d11
|
@ -24,14 +24,18 @@
|
|||
|
||||
package net.fabricmc.loom.configuration.ide;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.nio.file.Path;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.Set;
|
||||
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import com.google.gson.JsonElement;
|
||||
|
@ -46,6 +50,8 @@ import org.w3c.dom.Node;
|
|||
import net.fabricmc.loom.LoomGradleExtension;
|
||||
import net.fabricmc.loom.configuration.InstallerData;
|
||||
import net.fabricmc.loom.configuration.ide.idea.IdeaSyncTask;
|
||||
import net.fabricmc.loom.configuration.providers.BundleMetadata;
|
||||
import net.fabricmc.loom.util.Constants;
|
||||
|
||||
public class RunConfig {
|
||||
public String configName;
|
||||
|
@ -54,6 +60,7 @@ public class RunConfig {
|
|||
public String mainClass;
|
||||
public String runDirIdeaUrl;
|
||||
public String runDir;
|
||||
public String environment;
|
||||
public List<String> vmArgs = new ArrayList<>();
|
||||
public List<String> programArgs = new ArrayList<>();
|
||||
public SourceSet sourceSet;
|
||||
|
@ -163,6 +170,7 @@ public class RunConfig {
|
|||
runConfig.runDirIdeaUrl = "file://$PROJECT_DIR$/" + runDir;
|
||||
runConfig.runDir = runDir;
|
||||
runConfig.sourceSet = sourceSet;
|
||||
runConfig.environment = environment;
|
||||
|
||||
// Custom parameters
|
||||
runConfig.programArgs.addAll(settings.getProgramArgs());
|
||||
|
@ -251,6 +259,31 @@ public class RunConfig {
|
|||
return defaultMainClass;
|
||||
}
|
||||
|
||||
public List<String> getExcludedLibraryPaths(Project project) {
|
||||
if (!environment.equals("server")) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
final BundleMetadata bundleMetadata = LoomGradleExtension.get(project).getMinecraftProvider().getServerBundleMetadata();
|
||||
|
||||
if (bundleMetadata == null) {
|
||||
// Legacy version
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
final Set<File> allLibraries = project.getConfigurations().getByName(Constants.Configurations.MINECRAFT_DEPENDENCIES).getFiles();
|
||||
final Set<File> serverLibraries = project.getConfigurations().getByName(Constants.Configurations.MINECRAFT_SERVER_DEPENDENCIES).getFiles();
|
||||
final List<String> clientOnlyLibraries = new LinkedList<>();
|
||||
|
||||
for (File commonLibrary : allLibraries) {
|
||||
if (!serverLibraries.contains(commonLibrary)) {
|
||||
clientOnlyLibraries.add(commonLibrary.getAbsolutePath());
|
||||
}
|
||||
}
|
||||
|
||||
return clientOnlyLibraries;
|
||||
}
|
||||
|
||||
private static String encodeEscaped(String s) {
|
||||
StringBuilder ret = new StringBuilder();
|
||||
|
||||
|
|
|
@ -31,10 +31,7 @@ import java.io.StringWriter;
|
|||
import java.nio.charset.StandardCharsets;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.util.Collections;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.xml.parsers.DocumentBuilder;
|
||||
|
@ -57,9 +54,7 @@ import org.xml.sax.InputSource;
|
|||
import net.fabricmc.loom.LoomGradleExtension;
|
||||
import net.fabricmc.loom.configuration.ide.RunConfig;
|
||||
import net.fabricmc.loom.configuration.ide.RunConfigSettings;
|
||||
import net.fabricmc.loom.configuration.providers.BundleMetadata;
|
||||
import net.fabricmc.loom.task.AbstractLoomTask;
|
||||
import net.fabricmc.loom.util.Constants;
|
||||
|
||||
public abstract class IdeaSyncTask extends AbstractLoomTask {
|
||||
@Inject
|
||||
|
@ -90,8 +85,6 @@ public abstract class IdeaSyncTask extends AbstractLoomTask {
|
|||
runConfigsDir.mkdirs();
|
||||
}
|
||||
|
||||
final List<String> excludedServerLibraries = getExcludedServerLibraries();
|
||||
|
||||
for (RunConfigSettings settings : extension.getRunConfigs()) {
|
||||
if (!settings.isIdeConfigGenerated()) {
|
||||
continue;
|
||||
|
@ -109,9 +102,11 @@ public abstract class IdeaSyncTask extends AbstractLoomTask {
|
|||
|
||||
settings.makeRunDir();
|
||||
|
||||
if (settings.getEnvironment().equals("server") && !excludedServerLibraries.isEmpty()) {
|
||||
final List<String> excludedLibraryPaths = config.getExcludedLibraryPaths(getProject());
|
||||
|
||||
if (!excludedLibraryPaths.isEmpty()) {
|
||||
try {
|
||||
setClasspathModifications(runConfigs.toPath(), excludedServerLibraries);
|
||||
setClasspathModifications(runConfigs.toPath(), excludedLibraryPaths);
|
||||
} catch (Exception e) {
|
||||
getProject().getLogger().error("Failed to modify run configuration xml", e);
|
||||
}
|
||||
|
@ -119,27 +114,6 @@ public abstract class IdeaSyncTask extends AbstractLoomTask {
|
|||
}
|
||||
}
|
||||
|
||||
private List<String> getExcludedServerLibraries() {
|
||||
final BundleMetadata bundleMetadata = getExtension().getMinecraftProvider().getServerBundleMetadata();
|
||||
|
||||
if (bundleMetadata == null) {
|
||||
// Legacy version
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
final Set<File> allLibraries = getProject().getConfigurations().getByName(Constants.Configurations.MINECRAFT_DEPENDENCIES).getFiles();
|
||||
final Set<File> serverLibraries = getProject().getConfigurations().getByName(Constants.Configurations.MINECRAFT_SERVER_DEPENDENCIES).getFiles();
|
||||
final List<String> clientOnlyLibraries = new LinkedList<>();
|
||||
|
||||
for (File commonLibrary : allLibraries) {
|
||||
if (!serverLibraries.contains(commonLibrary)) {
|
||||
clientOnlyLibraries.add(commonLibrary.getAbsolutePath());
|
||||
}
|
||||
}
|
||||
|
||||
return clientOnlyLibraries;
|
||||
}
|
||||
|
||||
private void setClasspathModifications(Path runConfig, List<String> exclusions) throws IOException {
|
||||
if (!IdeaUtils.supportsCustomizableClasspath()) {
|
||||
return;
|
||||
|
|
|
@ -31,6 +31,7 @@ import java.util.List;
|
|||
import java.util.function.Function;
|
||||
|
||||
import org.gradle.api.Project;
|
||||
import org.gradle.api.specs.Spec;
|
||||
import org.gradle.api.tasks.JavaExec;
|
||||
|
||||
import net.fabricmc.loom.configuration.ide.RunConfig;
|
||||
|
@ -44,7 +45,7 @@ public abstract class AbstractRunTask extends JavaExec {
|
|||
setGroup(Constants.TaskGroup.FABRIC);
|
||||
this.config = configProvider.apply(getProject());
|
||||
|
||||
setClasspath(config.sourceSet.getRuntimeClasspath());
|
||||
setClasspath(config.sourceSet.getRuntimeClasspath().filter(new LibraryFilter()));
|
||||
args(config.programArgs);
|
||||
getMainClass().set(config.mainClass);
|
||||
}
|
||||
|
@ -72,4 +73,22 @@ public abstract class AbstractRunTask extends JavaExec {
|
|||
args.addAll(config.vmArgs);
|
||||
return args;
|
||||
}
|
||||
|
||||
private class LibraryFilter implements Spec<File> {
|
||||
private List<String> excludedLibraryPaths = null;
|
||||
|
||||
@Override
|
||||
public boolean isSatisfiedBy(File element) {
|
||||
if (excludedLibraryPaths == null) {
|
||||
excludedLibraryPaths = config.getExcludedLibraryPaths(getProject());
|
||||
}
|
||||
|
||||
if (excludedLibraryPaths.contains(element.getAbsolutePath())) {
|
||||
getProject().getLogger().debug("Excluding library {} from {} run config", element.getName(), config.configName);
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -31,7 +31,7 @@ archivesBaseName = "fabric-example-mod"
|
|||
version = "1.0.0"
|
||||
|
||||
dependencies {
|
||||
minecraft "com.mojang:minecraft:1.16.5"
|
||||
mappings "net.fabricmc:yarn:1.16.5+build.5:v2"
|
||||
modImplementation "net.fabricmc:fabric-loader:0.11.2"
|
||||
minecraft "com.mojang:minecraft:1.18.1"
|
||||
mappings "net.fabricmc:yarn:1.18.1+build.12:v2"
|
||||
modImplementation "net.fabricmc:fabric-loader:0.12.12"
|
||||
}
|
Loading…
Reference in New Issue