I'm experiencing some issues with a multi-project Minecraft mod. I have a library mod, let's call it libmod (which is a gradle project in /root/lib/libmod), and an actual mod appmod (which is also a gradle project in /root).
I have tried two options, A and B, in option A, the project is configured as a multi-project, however I can get FML to load libmod in this case. In the second case, the project is not defined as a multi-project, and the sourceSets are defined manually, but here the dependency is not regocnized in my IDE (Idea).
OPTION A:
I have a settings.gradle set up as such:
rootProject.name = 'appmod'
include 'lib/libmod'
I tried setting up my build.gradle as I would have in the pre 1.12 era, defining libmod project as a dependency, and pointing to tis sourcesets as shown below, the runClient and runServer tasks will not work, because for some reason both sourceSets.main and project(":lib/libmod") point to the same sourceset (which is sourceSets.main). With this configuration, the dependency is loaded correctly though, and I can reference classes in my libmod without problem.
minecraft {
mappings channel: "${config.mapping_channel}", version: "${config.mapping_version}"
runs {
client {
workingDirectory project.file('run')
property 'forge.logging.markers', 'SCAN,REGISTRIES,REGISTRYDUMP'
property 'forge.logging.console.level', 'debug'
mods {
appmod {
source sourceSets.main
}
libmod {
source project(":lib/libmod").sourceSets.main
}
}
}
server {
workingDirectory project.file('run')
property 'forge.logging.markers', 'SCAN,REGISTRIES,REGISTRYDUMP'
property 'forge.logging.console.level', 'debug'
mods {
appmod {
source sourceSets.main
}
libmod {
source project(":lib/libmod").sourceSets.main
}
}
}
}
}
dependencies {
minecraft "net.minecraftforge:forge:${config.version_minecraft}-${config.version_forge}"
compile project(":lib/libmod")
}
OPTION B:
As an alternative approach, I tried defining libmod's sourcesets manually, but here I had to remove the 'include libmod' statement from settings.gradle as Idea was complaining about duplicate sources.
The problem here however, is that in Idea, libmod is no longer recognized as a dependency, giving compile errors whenever I reference a libmod class.
sourceSets {
libmod {
compileClasspath += sourceSets.main.output
runtimeClasspath += sourceSets.main.output
java {
srcDir "lib/libmod/src/main/java"
}
resources {
srcDir "lib/libmod/src/main/resources"
}
}
}
configurations {
libmodCompile.extendsFrom(compile)
libmodCompileOnly.extendsFrom(compileOnly)
libmodRuntimeOnly.extendsFrom(runtimeOnly)
}
minecraft {
mappings channel: "${config.mapping_channel}", version: "${config.mapping_version}"
runs {
client {
workingDirectory project.file('run')
property 'forge.logging.markers', 'SCAN,REGISTRIES,REGISTRYDUMP'
property 'forge.logging.console.level', 'debug'
mods {
appmod {
source sourceSets.main
}
libmod {
source sourceSets.libmod
}
}
}
server {
workingDirectory project.file('run')
property 'forge.logging.markers', 'SCAN,REGISTRIES,REGISTRYDUMP'
property 'forge.logging.console.level', 'debug'
mods {
appmod {
source sourceSets.main
}
libmod {
source sourceSets.libmod
}
}
}
}
}
repositories {
flatDir {
dirs 'lib'
}
}
dependencies {
minecraft "net.minecraftforge:forge:${config.version_minecraft}-${config.version_forge}"
compile "libmod_group:libmod:libmod_version"
}
Thus to TLDR my question, in case of a Gradle multi-project, how does one correctly reference the sourceSets of a subproject? Or alternatively, when explicitly defining the sourceSets (not configured as multi-project), how does one then correctly define the dependency to the subproject (the former being my preferred approach)?
Thanks in advance