Issue
I currently have 3 subprojects in my Gradle project, structured like so:
Main Project
|
-- Project A
-- Project B
-- Common Src
Project A has dependency on Lib A and Common Src, and Project B has dependency on Lib B and Common Src. Lib A and Lib B contain different implementations of the same classes.
My plan for Common Src project was to house all of the utility classes, necessarily depending on both Lib A and Lib B.
Is there a way to set this up, and how should my gradle project look like?
Things that I've tried:
- I've tried to remove Common Src as a subproject and just include it in the sourceSets of Project A and Project B. However, IntelliJ seems to mark Common Src as sources root of Project A, and even though build-through-gradle works, I cannot get IntelliJ to recognize that Project B also has sources root in Common Src.
- Add both Lib A and Lib B to dependency of Common Src, but obviously that doesn't work.
The background:
I've created a Minecraft mod compatible with both Forge (Project A) and Fabric (Project B) modloaders. I have utility classes in both projects that have the same source code but need to be compiled twice, each time with a different dependency. I don't want to have to write the code twice each time I want to change something in the Utility classes.
Solution
EDIT: I've found a workaround:
- In both
Project A
andProject B
, add a task in each of theirbuild.gradle
to copy the source files fromCommon Src
to the build directory of each project. - Configure
sourceSets
of bothProject A
andProject B
to include source files from the build folder we just copied into - Configure
Common Src
to be a gradle subproject, and addLib A
(orLib B
) to the dependencies ofCommon Src
(just to get IntelliJ some context)
Answered By - EDToaster
Answer Checked By - David Marino (JavaFixing Volunteer)