diff --git a/modules/neoforge-metadata/src/main/java/com/ldtteam/tableau/neoforge/metadata/components/model/ModDependencies.java b/modules/neoforge-metadata/src/main/java/com/ldtteam/tableau/neoforge/metadata/components/model/ModDependencies.java
index 68a129f..7569f94 100644
--- a/modules/neoforge-metadata/src/main/java/com/ldtteam/tableau/neoforge/metadata/components/model/ModDependencies.java
+++ b/modules/neoforge-metadata/src/main/java/com/ldtteam/tableau/neoforge/metadata/components/model/ModDependencies.java
@@ -1,5 +1,7 @@
package com.ldtteam.tableau.neoforge.metadata.components.model;
+import java.util.ArrayList;
+
import javax.inject.Inject;
import org.gradle.api.Project;
@@ -16,16 +18,21 @@
/**
* Represents the dependencies of a mod.
*
- * Mod dependencies can either be added to the required or optional dependencies collection, which is wired to the source sets implementation or api configuration.
+ * Mod dependencies can either be added to the required or optional dependencies
+ * collection, which is wired to the source sets implementation or api
+ * configuration.
*
- * Alternatively, a dependency can directly be added as a model component to the mod metadata.
+ * Alternatively, a dependency can directly be added as a model component to the
+ * mod metadata.
*/
-public abstract class ModDependencies extends DelegatingNamedDomainObjectContainer implements Dependencies {
-
+public abstract class ModDependencies extends DelegatingNamedDomainObjectContainer
+ implements Dependencies {
+
/**
* Creates a new ModDependencies instance.
*
- * @param project The project.
+ * @param project The project.
+ * @param sourceSetConfiguration The source set configuration.
*/
@Inject
public ModDependencies(final Project project, final SourceSetConfiguration sourceSetConfiguration) {
@@ -34,29 +41,43 @@ public ModDependencies(final Project project, final SourceSetConfiguration sourc
}));
this.addAllLater(getRequired().getDependencies().flatMap(dependencies -> {
- final Configuration resolveTarget = project.getConfigurations().detachedConfiguration(dependencies.toArray(Dependency[]::new));
+ if (dependencies.isEmpty()) {
+ return project.provider(() -> new ArrayList<>());
+ }
+
+ final Configuration resolveTarget = project.getConfigurations()
+ .detachedConfiguration(dependencies.toArray(Dependency[]::new));
resolveTarget.getDependencyConstraints().addAllLater(getRequired().getDependencyConstraints());
return DependencyResolver.resolveDependencies(project, getProblems(), resolveTarget, true);
}));
this.addAllLater(getOptional().getDependencies().flatMap(dependencies -> {
- final Configuration resolveTarget = project.getConfigurations().detachedConfiguration(dependencies.toArray(Dependency[]::new));
+ if (dependencies.isEmpty()) {
+ return project.provider(() -> new ArrayList<>());
+ }
+
+ final Configuration resolveTarget = project.getConfigurations()
+ .detachedConfiguration(dependencies.toArray(Dependency[]::new));
resolveTarget.getDependencyConstraints().addAllLater(getOptional().getDependencyConstraints());
return DependencyResolver.resolveDependencies(project, getProblems(), resolveTarget, false);
}));
- final Configuration runtimeClasspath = project.getConfigurations().maybeCreate(sourceSetConfiguration.getSourceSet().getRuntimeClasspathConfigurationName());
- final Configuration api = project.getConfigurations().maybeCreate(sourceSetConfiguration.getSourceSet().getApiConfigurationName());
+ final Configuration runtimeClasspath = project.getConfigurations()
+ .maybeCreate(sourceSetConfiguration.getSourceSet().getRuntimeClasspathConfigurationName());
+ final Configuration api = project.getConfigurations()
+ .maybeCreate(sourceSetConfiguration.getSourceSet().getApiConfigurationName());
runtimeClasspath.fromDependencyCollector(getOptional());
api.fromDependencyCollector(getRequired());
+
}
/**
- * Problem reporter used to report dependency resolution and metadata extraction issues.
+ * Problem reporter used to report dependency resolution and metadata extraction
+ * issues.
*
* @return the problem reporter
*/
- @Inject
+ @Inject
protected abstract Problems getProblems();
/**
diff --git a/modules/neoforge-metadata/src/main/java/com/ldtteam/tableau/neoforge/metadata/utils/DependencyResolver.java b/modules/neoforge-metadata/src/main/java/com/ldtteam/tableau/neoforge/metadata/utils/DependencyResolver.java
index d158b7f..fb3aaf9 100644
--- a/modules/neoforge-metadata/src/main/java/com/ldtteam/tableau/neoforge/metadata/utils/DependencyResolver.java
+++ b/modules/neoforge-metadata/src/main/java/com/ldtteam/tableau/neoforge/metadata/utils/DependencyResolver.java
@@ -40,6 +40,8 @@ private DependencyResolver() {
/**
* Find all the resolved dependencies.
*
+ * @param project The project in which dependencies are being resolved.
+ * @param problems The problems handler.
* @param configuration The configuration to look for dependencies in.
* @param required Whether this dependency is required or not.
* @return The set provider.
diff --git a/modules/neoforge-metadata/src/test/java/com/ldtteam/tableau/neoforge/metadata/components/model/ModTest.java b/modules/neoforge-metadata/src/test/java/com/ldtteam/tableau/neoforge/metadata/components/model/ModTest.java
index 7e23cb4..81b2d24 100644
--- a/modules/neoforge-metadata/src/test/java/com/ldtteam/tableau/neoforge/metadata/components/model/ModTest.java
+++ b/modules/neoforge-metadata/src/test/java/com/ldtteam/tableau/neoforge/metadata/components/model/ModTest.java
@@ -32,6 +32,8 @@ void setUp() {
sourceSetConfiguration = mock(SourceSetConfiguration.class);
sourceSet = mock(SourceSet.class);
when(sourceSetConfiguration.getSourceSet()).thenReturn(sourceSet);
+ when(sourceSet.getRuntimeClasspathConfigurationName()).thenReturn("runtimeClasspath");
+ when(sourceSet.getApiConfigurationName()).thenReturn("api");
mod = project.getObjects().newInstance(Mod.class, project, sourceSetConfiguration, "testMod");
}