Make Run Config run dir relative to the project and not the root project. Move eclipse launch config files out of the root project. Closes #509
parent
d57f61a38a
commit
ce0a3308ff
|
@ -27,6 +27,7 @@ package net.fabricmc.loom.configuration.ide;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
|
import java.nio.file.Path;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
|
@ -181,13 +182,23 @@ public class RunConfig {
|
||||||
return runConfig;
|
return runConfig;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String fromDummy(String dummy) throws IOException {
|
public String fromDummy(String dummy, boolean relativeDir, Project project) throws IOException {
|
||||||
String dummyConfig;
|
String dummyConfig;
|
||||||
|
|
||||||
try (InputStream input = SetupIntelijRunConfigs.class.getClassLoader().getResourceAsStream(dummy)) {
|
try (InputStream input = SetupIntelijRunConfigs.class.getClassLoader().getResourceAsStream(dummy)) {
|
||||||
dummyConfig = new String(input.readAllBytes(), StandardCharsets.UTF_8);
|
dummyConfig = new String(input.readAllBytes(), StandardCharsets.UTF_8);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String runDir = this.runDir;
|
||||||
|
|
||||||
|
if (relativeDir && project.getRootProject() != project) {
|
||||||
|
Path rootPath = project.getRootDir().toPath();
|
||||||
|
Path projectPath = project.getProjectDir().toPath();
|
||||||
|
String relativePath = rootPath.relativize(projectPath).toString();
|
||||||
|
|
||||||
|
runDir = relativePath + "/" + runDir;
|
||||||
|
}
|
||||||
|
|
||||||
dummyConfig = dummyConfig.replace("%NAME%", configName);
|
dummyConfig = dummyConfig.replace("%NAME%", configName);
|
||||||
dummyConfig = dummyConfig.replace("%MAIN_CLASS%", mainClass);
|
dummyConfig = dummyConfig.replace("%MAIN_CLASS%", mainClass);
|
||||||
dummyConfig = dummyConfig.replace("%ECLIPSE_PROJECT%", eclipseProjectName);
|
dummyConfig = dummyConfig.replace("%ECLIPSE_PROJECT%", eclipseProjectName);
|
||||||
|
|
|
@ -289,7 +289,7 @@ public final class RunConfigSettings implements Named {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void makeRunDir() {
|
public void makeRunDir() {
|
||||||
File file = new File(getProject().getRootDir(), runDir);
|
File file = new File(getProject().getProjectDir(), runDir);
|
||||||
|
|
||||||
if (!file.exists()) {
|
if (!file.exists()) {
|
||||||
file.mkdir();
|
file.mkdir();
|
||||||
|
|
|
@ -37,8 +37,6 @@ import net.fabricmc.loom.configuration.providers.minecraft.assets.MinecraftAsset
|
||||||
|
|
||||||
public class SetupIntelijRunConfigs {
|
public class SetupIntelijRunConfigs {
|
||||||
public static void setup(Project project) {
|
public static void setup(Project project) {
|
||||||
LoomGradleExtension extension = LoomGradleExtension.get(project);
|
|
||||||
|
|
||||||
File projectDir = project.getRootProject().file(".idea");
|
File projectDir = project.getRootProject().file(".idea");
|
||||||
|
|
||||||
if (!projectDir.exists()) {
|
if (!projectDir.exists()) {
|
||||||
|
@ -80,7 +78,7 @@ public class SetupIntelijRunConfigs {
|
||||||
String name = config.configName.replaceAll("[^a-zA-Z0-9$_]", "_");
|
String name = config.configName.replaceAll("[^a-zA-Z0-9$_]", "_");
|
||||||
|
|
||||||
File runConfigs = new File(runConfigsDir, name + projectPath + ".xml");
|
File runConfigs = new File(runConfigsDir, name + projectPath + ".xml");
|
||||||
String runConfigXml = config.fromDummy("idea_run_config_template.xml");
|
String runConfigXml = config.fromDummy("idea_run_config_template.xml", true, project);
|
||||||
|
|
||||||
if (!runConfigs.exists()) {
|
if (!runConfigs.exists()) {
|
||||||
FileUtils.writeStringToFile(runConfigs, runConfigXml, StandardCharsets.UTF_8);
|
FileUtils.writeStringToFile(runConfigs, runConfigXml, StandardCharsets.UTF_8);
|
||||||
|
|
|
@ -49,9 +49,9 @@ public class GenEclipseRunsTask extends AbstractLoomTask {
|
||||||
|
|
||||||
String name = settings.getName();
|
String name = settings.getName();
|
||||||
|
|
||||||
File configs = new File(getProject().getRootDir(), eclipseModel.getProject().getName() + "_" + name + ".launch");
|
File configs = new File(getProject().getProjectDir(), eclipseModel.getProject().getName() + "_" + name + ".launch");
|
||||||
RunConfig configInst = RunConfig.runConfig(getProject(), settings);
|
RunConfig configInst = RunConfig.runConfig(getProject(), settings);
|
||||||
String config = configInst.fromDummy("eclipse_run_config_template.xml");
|
String config = configInst.fromDummy("eclipse_run_config_template.xml", false, getProject());
|
||||||
|
|
||||||
if (!configs.exists()) {
|
if (!configs.exists()) {
|
||||||
FileUtils.writeStringToFile(configs, config, StandardCharsets.UTF_8);
|
FileUtils.writeStringToFile(configs, config, StandardCharsets.UTF_8);
|
||||||
|
|
|
@ -27,6 +27,7 @@ package net.fabricmc.loom.task;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
|
import java.nio.file.Path;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
@ -78,7 +79,7 @@ public class GenVsCodeProjectTask extends AbstractLoomTask {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static class VsCodeLaunch {
|
private class VsCodeLaunch {
|
||||||
public String version = "0.2.0";
|
public String version = "0.2.0";
|
||||||
public List<VsCodeConfiguration> configurations = new ArrayList<>();
|
public List<VsCodeConfiguration> configurations = new ArrayList<>();
|
||||||
|
|
||||||
|
@ -88,7 +89,7 @@ public class GenVsCodeProjectTask extends AbstractLoomTask {
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
private static class VsCodeConfiguration {
|
private class VsCodeConfiguration {
|
||||||
public String type = "java";
|
public String type = "java";
|
||||||
public String name;
|
public String name;
|
||||||
public String request = "launch";
|
public String request = "launch";
|
||||||
|
@ -105,6 +106,14 @@ public class GenVsCodeProjectTask extends AbstractLoomTask {
|
||||||
this.vmArgs = runConfig.vmArgs;
|
this.vmArgs = runConfig.vmArgs;
|
||||||
this.args = runConfig.programArgs;
|
this.args = runConfig.programArgs;
|
||||||
this.cwd = "${workspaceFolder}/" + runConfig.runDir;
|
this.cwd = "${workspaceFolder}/" + runConfig.runDir;
|
||||||
|
|
||||||
|
if (getProject().getRootProject() != getProject()) {
|
||||||
|
Path rootPath = getProject().getRootDir().toPath();
|
||||||
|
Path projectPath = getProject().getProjectDir().toPath();
|
||||||
|
String relativePath = rootPath.relativize(projectPath).toString();
|
||||||
|
|
||||||
|
this.cwd = "${workspaceFolder}/%s/%s".formatted(relativePath, runConfig.runDir);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -38,7 +38,7 @@ class MultiProjectTest extends Specification implements GradleProjectTestTrait {
|
||||||
def gradle = gradleProject(project: "multiproject", version: version)
|
def gradle = gradleProject(project: "multiproject", version: version)
|
||||||
|
|
||||||
when:
|
when:
|
||||||
def result = gradle.run(task: "build")
|
def result = gradle.run(tasks: ["build", "eclipse", "vscode", "idea"])
|
||||||
|
|
||||||
then:
|
then:
|
||||||
result.task(":build").outcome == SUCCESS
|
result.task(":build").outcome == SUCCESS
|
||||||
|
|
|
@ -2,4 +2,10 @@ archivesBaseName = "example"
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation project(path: ":core", configuration: "dev")
|
implementation project(path: ":core", configuration: "dev")
|
||||||
|
}
|
||||||
|
|
||||||
|
loom {
|
||||||
|
runConfigs.configureEach {
|
||||||
|
ideConfigGenerated = true
|
||||||
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue