Skip to content

Commit fe0c3dd

Browse files
committed
build: Make things compatible with isolated projects
1 parent 1b17b3b commit fe0c3dd

10 files changed

Lines changed: 53 additions & 72 deletions

File tree

build-logic/src/main/java/juuxel/adorn/gradle/CorePlugin.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,21 @@
33
import juuxel.adorn.gradle.xplat.AdornExtension;
44
import org.gradle.api.Plugin;
55
import org.gradle.api.Project;
6+
import org.gradle.api.plugins.BasePluginExtension;
67

78
public final class CorePlugin implements Plugin<Project> {
89
public static final String TASK_GROUP = "adorn";
910

1011
@Override
1112
public void apply(Project project) {
13+
project.getPlugins().apply("base");
14+
15+
var providers = project.getProviders();
16+
var base = project.getExtensions().getByType(BasePluginExtension.class);
17+
base.getArchivesName().set(providers.gradleProperty("archives-name"));
18+
project.setGroup(providers.gradleProperty("group").get());
19+
project.setVersion(providers.gradleProperty("mod-version").get() + "+" + providers.gradleProperty("minecraft-version").get());
20+
1221
project.getExtensions().create("adorn", AdornExtension.class);
1322
}
1423

build-logic/src/main/java/juuxel/adorn/gradle/MinecraftSetupPlugin.java

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,26 +5,21 @@
55
import org.gradle.api.JavaVersion;
66
import org.gradle.api.Plugin;
77
import org.gradle.api.Project;
8-
import org.gradle.api.plugins.BasePluginExtension;
98
import org.gradle.api.plugins.JavaPluginExtension;
109
import org.gradle.api.tasks.SourceSet;
1110
import org.gradle.api.tasks.bundling.AbstractArchiveTask;
1211
import org.gradle.api.tasks.bundling.Jar;
1312
import org.gradle.api.tasks.compile.JavaCompile;
1413

14+
import java.io.File;
15+
1516
public final class MinecraftSetupPlugin implements Plugin<Project> {
1617
@Override
1718
public void apply(Project project) {
1819
project.getPlugins().apply("dev.architectury.loom-no-remap");
1920
project.getPlugins().apply(CorePlugin.class);
2021
var extension = CorePlugin.registerExtension(project, "minecraft", MinecraftExtension.class);
2122

22-
// Copy the artifact metadata from the root project.
23-
Project rootProject = project.getRootProject();
24-
project.setGroup(rootProject.getGroup());
25-
project.setVersion(rootProject.getVersion());
26-
getBase(project).getArchivesName().set(getBase(rootProject).getArchivesName());
27-
2823
extension.getMinecraftVersion().convention(project.getProviders().gradleProperty("minecraft-version"));
2924

3025
// Set up Java version
@@ -43,7 +38,7 @@ public void apply(Project project) {
4338

4439
// Include the license in the jar files.
4540
project.getTasks().named("jar", Jar.class, task -> {
46-
task.from(rootProject.file("LICENSE"));
41+
task.from(new File(project.getRootDir(), "LICENSE"));
4742
});
4843

4944
var loom = project.getExtensions().getByType(LoomGradleExtensionAPI.class);
@@ -57,8 +52,4 @@ public void apply(Project project) {
5752
// Generate package-info files with the @NullMarked annotation for the main source set.
5853
extension.generatePackageInfos(java.getSourceSets().getByName(SourceSet.MAIN_SOURCE_SET_NAME));
5954
}
60-
61-
private static BasePluginExtension getBase(Project project) {
62-
return project.getExtensions().getByType(BasePluginExtension.class);
63-
}
6455
}

build-logic/src/main/java/juuxel/adorn/gradle/ModularDataGeneratorPlugin.java

Lines changed: 8 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,6 @@
1010
import org.gradle.api.plugins.JavaPluginExtension;
1111
import org.gradle.api.tasks.SourceSetContainer;
1212

13-
import java.io.File;
14-
import java.util.ArrayList;
15-
1613
public final class ModularDataGeneratorPlugin implements Plugin<Project> {
1714
@Override
1815
public void apply(Project project) {
@@ -53,23 +50,19 @@ private static void setup(Project project, DataGeneratorExtension.Settings setti
5350
task.mustRunAfter(generateMainData);
5451
task.getOutput().convention(GenerateEmi.getOutputFile(generateMainData.flatMap(GenerateData::getOutput), task.getModId()));
5552
task.getModId().set(settings.getModId());
56-
var resourceDirs = new ArrayList<>(sourceSet.getResources().getSrcDirs());
53+
54+
task.source(sourceSet.getResources().getSrcDirs());
55+
task.source(hoard.getDirectoriesForSourceSet(sourceSet));
5756

5857
if (settings.getIncludeCommonFilesInEmi().get()) {
59-
resourceDirs.addAll(getSourceSets(project.project(":common")).getByName("main").getResources().getSrcDirs());
58+
task.source(project.getConfigurations().named(PlatformModulePlugin.COMMON_RESOURCES_CONFIGURATION_NAME));
6059
}
6160

62-
resourceDirs.addAll(hoard.getDirectoriesForSourceSet(sourceSet).getFiles());
61+
task.include("**/data/adorn/recipe/**/*.json");
6362

64-
for (File dir : resourceDirs) {
65-
task.getRecipes().from(project.fileTree(dir, tree -> {
66-
tree.include("**/data/adorn/recipe/**");
67-
68-
// The unpacking recipes create "uncraftable" vanilla items like
69-
// nether wart, so exclude them.
70-
tree.exclude("**/data/adorn/recipe/crates/unpack/**");
71-
}));
72-
}
63+
// The unpacking recipes create "uncraftable" vanilla items like
64+
// nether wart, so exclude them.
65+
task.exclude("data/adorn/recipe/crates/unpack/**");
7366
});
7467
generateData.configure(task -> task.dependsOn(generateEmi));
7568
generateMainData.configure(task -> {

build-logic/src/main/java/juuxel/adorn/gradle/PlatformModulePlugin.java

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,11 @@
1919
import java.util.Map;
2020

2121
public final class PlatformModulePlugin implements Plugin<Project> {
22+
public static final String COMMON_CONFIGURATION_NAME = "common";
23+
public static final String COMMON_CLASSES_CONFIGURATION_NAME = "commonClasses";
24+
public static final String COMMON_RESOURCES_CONFIGURATION_NAME = "commonResources";
25+
26+
@SuppressWarnings("unchecked")
2227
@Override
2328
public void apply(Project project) {
2429
project.getPlugins().apply(MinecraftSetupPlugin.class);
@@ -27,12 +32,12 @@ public void apply(Project project) {
2732

2833
// Set up configurations to depend on common
2934
var objects = project.getObjects();
30-
var common = project.getConfigurations().dependencyScope("common");
31-
var commonClasses = project.getConfigurations().resolvable("commonClasses", config -> {
35+
var common = project.getConfigurations().dependencyScope(COMMON_CONFIGURATION_NAME);
36+
var commonClasses = project.getConfigurations().resolvable(COMMON_CLASSES_CONFIGURATION_NAME, config -> {
3237
config.getAttributes().attribute(LibraryElements.LIBRARY_ELEMENTS_ATTRIBUTE, objects.named(LibraryElements.class, LibraryElements.CLASSES));
3338
config.extendsFrom(common);
3439
});
35-
var commonResources = project.getConfigurations().resolvable("commonResources", config -> {
40+
var commonResources = project.getConfigurations().resolvable(COMMON_RESOURCES_CONFIGURATION_NAME, config -> {
3641
config.getAttributes().attribute(LibraryElements.LIBRARY_ELEMENTS_ATTRIBUTE, objects.named(LibraryElements.class, LibraryElements.RESOURCES));
3742
config.extendsFrom(common);
3843
});
@@ -82,8 +87,8 @@ public void apply(Project project) {
8287
project.getDependencies().add(JavaPlugin.IMPLEMENTATION_CONFIGURATION_NAME, createCommonClientDependency(project));
8388
}
8489

85-
project.getDependencies().add(common.getName(), createCommonDependency(project));
86-
project.getDependencies().add(common.getName(), createCommonClientDependency(project));
90+
project.getDependencies().add(COMMON_CONFIGURATION_NAME, createCommonDependency(project));
91+
project.getDependencies().add(COMMON_CONFIGURATION_NAME, createCommonClientDependency(project));
8792
}
8893

8994
private static Dependency createCommonDependency(Project project) {

build-logic/src/main/java/juuxel/adorn/gradle/datagen/GenerateEmi.java

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,15 @@
22

33
import groovy.json.JsonOutput;
44
import groovy.json.JsonSlurper;
5-
import org.gradle.api.DefaultTask;
6-
import org.gradle.api.file.ConfigurableFileCollection;
75
import org.gradle.api.file.Directory;
86
import org.gradle.api.file.RegularFile;
97
import org.gradle.api.file.RegularFileProperty;
108
import org.gradle.api.provider.Property;
119
import org.gradle.api.provider.Provider;
1210
import org.gradle.api.provider.SetProperty;
1311
import org.gradle.api.tasks.Input;
14-
import org.gradle.api.tasks.InputFiles;
1512
import org.gradle.api.tasks.OutputFile;
16-
import org.gradle.api.tasks.PathSensitive;
17-
import org.gradle.api.tasks.PathSensitivity;
13+
import org.gradle.api.tasks.SourceTask;
1814
import org.gradle.api.tasks.TaskAction;
1915
import org.jspecify.annotations.Nullable;
2016

@@ -26,13 +22,9 @@
2622
import java.util.TreeSet;
2723
import java.util.stream.Collectors;
2824

29-
public abstract class GenerateEmi extends DefaultTask {
25+
public abstract class GenerateEmi extends SourceTask {
3026
private static final String RECIPE_DIR = "/data/adorn/recipe/";
3127

32-
@InputFiles
33-
@PathSensitive(PathSensitivity.ABSOLUTE)
34-
public abstract ConfigurableFileCollection getRecipes();
35-
3628
@Input
3729
public abstract SetProperty<String> getPreferredRecipes();
3830

@@ -55,7 +47,7 @@ public static Provider<RegularFile> getOutputFile(Provider<Directory> directoryP
5547
public void generateRecipeDefaults() throws IOException {
5648
var recipesByResult = new HashMap<RecipeResult, RecipeData>();
5749
var preferredRecipes = getPreferredRecipes().get();
58-
for (var recipeFile : getRecipes()) {
50+
for (var recipeFile : getSource()) {
5951
var json = (Map<String, ?>) new JsonSlurper().parse(recipeFile);
6052
var result = getResult(json);
6153
if (result == null) continue;

build-logic/src/main/java/juuxel/adorn/gradle/xplat/PlatformModuleExtension.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@ public PlatformModuleExtension(Project project) {
2020
getPlatformName().convention(project.getName());
2121

2222
Project common = project.project(":common");
23-
Provider<File> defaultAwFile = common.provider(() -> common.file("src/main/resources/adorn.accesswidener"));
24-
getAccessWidenerFile().convention(common.getLayout().file(defaultAwFile));
23+
Provider<File> defaultAwFile = project.provider(() -> new File(common.getProjectDir(), "src/main/resources/adorn.accesswidener"));
24+
getAccessWidenerFile().convention(project.getLayout().file(defaultAwFile));
2525
}
2626

2727
public abstract Property<String> getPlatformName();

build.gradle.kts

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,7 @@
11
plugins {
2-
// Apply the base plugin which mostly defines useful "build lifecycle" tasks like
3-
// assemble, check and build. The root project doesn't contain any code,
4-
// so we won't apply those plugins here. Only the assemble task is used in the root project.
5-
// See https://docs.gradle.org/current/userguide/base_plugin.html.
6-
base
2+
id("adorn-core")
73
}
84

9-
// Set up basic Maven artifact metadata, including the project version
10-
// and archive names.
11-
group = "io.github.juuxel"
12-
// Set the project version to be <mod version>+<Minecraft version> so the MC version is semver build metadata.
13-
// The "mod-version" and "minecraft-version" properties are read from gradle.properties.
14-
version = "${project.property("mod-version")}+${project.property("minecraft-version")}"
15-
base.archivesName.set("Adorn")
16-
175
tasks {
186
// Register a custom "collect jars" task that copies the Fabric and Forge mod jars
197
// into the root project's build/libs. This makes it easier for me to find them

fabric/build.gradle.kts

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ adorn {
2424
hoard {
2525
addResources(sourceSets.main.get(), "src/generated/resources")
2626
addResources(sourceSets.main.get(), "src/hoard/other")
27-
addResources(sourceSets.main.get(), project(":common").file("src/generated/resources"))
28-
addResources(sourceSets.main.get(), project(":common").file("src/hoard/other"))
27+
addResources(sourceSets.main.get(), project(":common").projectDir.resolve("src/generated/resources"))
28+
addResources(sourceSets.main.get(), project(":common").projectDir.resolve("src/hoard/other"))
2929
injectToFabricMod()
3030
}
3131

@@ -40,27 +40,28 @@ adorn {
4040
}
4141

4242
fun registerDataGenerator(name: String, displayName: String, common: Boolean) {
43-
val targetProject = if (common) {
43+
val projectDir = if (common) {
4444
project(":common")
4545
} else {
4646
project
47-
}
47+
}.projectDir
4848

4949
loom.runs.register(name) {
5050
inherit(loom.runs.getByName("client"))
5151
this.displayName = displayName
5252
sourceSet = "commonData"
5353
systemProperties.put("fabric-api.datagen", "")
54-
systemProperties.put("fabric-api.datagen.output-dir", targetProject.file("src/generated/resources").absolutePath)
54+
systemProperties.put("fabric-api.datagen.output-dir", projectDir.resolve("src/generated/resources").absolutePath)
5555
runDirectory = file("build/$name")
5656

5757
if (common) {
5858
systemProperties.put("adorn.data.commonMode", "true")
59-
systemProperties.put("adorn.data.mainConfigs", targetProject.file("src/data/vanilla.xml").absolutePath)
60-
val tagConfigDirs = rootProject.subprojects.map { it.file("src/data") }
61-
systemProperties.put("adorn.data.tagConfigDirs", tagConfigDirs.joinToString(File.pathSeparator) { it.absolutePath })
62-
systemProperties.put("adorn.data.fabricConfigDirs", project(":fabric").file("src/data").absolutePath)
63-
systemProperties.put("adorn.data.neoforgeConfigDirs", project(":forge").file("src/data").absolutePath)
59+
systemProperties.put("adorn.data.mainConfigs", projectDir.resolve("src/data/vanilla.xml").absolutePath)
60+
systemProperties.put("adorn.data.tagConfigDirs", rootProject.subprojects.joinToString(File.pathSeparator) {
61+
it.projectDir.resolve("src/data").absolutePath
62+
})
63+
systemProperties.put("adorn.data.fabricConfigDirs", file("src/data").absolutePath)
64+
systemProperties.put("adorn.data.neoforgeConfigDirs", project(":forge").projectDir.resolve("src/data").absolutePath)
6465
} else {
6566
systemProperties.put("adorn.data.mainConfigs", file("src/data").absolutePath)
6667
}
@@ -138,7 +139,7 @@ tasks {
138139
rename { "fabric.mod.json" }
139140
}
140141

141-
from(project(":common").file("src/main/resources/assets/adorn/icon.png")) {
142+
from(project(":common").projectDir.resolve("src/main/resources/assets/adorn/icon.png")) {
142143
into(adorn.hoard.modId.map { "assets/$it" })
143144
}
144145
}

forge/build.gradle.kts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ loom {
1515

1616
adorn {
1717
hoard {
18-
addResources(sourceSets.main.get(), project(":common").file("src/generated/resources"))
19-
addResources(sourceSets.main.get(), project(":common").file("src/hoard/other"))
18+
addResources(sourceSets.main.get(), project(":common").projectDir.resolve("src/generated/resources"))
19+
addResources(sourceSets.main.get(), project(":common").projectDir.resolve("src/hoard/other"))
2020
injectToNeoForgeMod()
2121
}
2222

@@ -62,7 +62,7 @@ tasks {
6262
rename { "neoforge.mods.toml" }
6363
}
6464

65-
from(project(":common").file("src/main/resources/assets/adorn/icon.png")) {
65+
from(project(":common").projectDir.resolve("src/main/resources/assets/adorn/icon.png")) {
6666
into(adorn.hoard.modId.map { "assets/$it" })
6767
}
6868
}

gradle.properties

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ org.gradle.configuration-cache=true
66

77
# Adorn
88
mod-version = 7.6.0
9+
group = io.github.juuxel
10+
archives-name = Adorn
911

1012
# Minecraft
1113
minecraft-version = 26.1.2

0 commit comments

Comments
 (0)