This project was created to illustrate a StackOverflow question about adding a runtime dependency on a generated source set in Gradle
This project demonstrates one of the innumerable headaches of using generated code in Gradle.
The application has a main class in the main source set which dynamically loads a class from a generated source set. I don’t think it actually matters that the other source set is generated; what’s important is that it’s a separate source set. The class in the generated source set has compile-time dependencies on both the main source set, and a module dependency. The main source set also has module dependencies. Got that?
For this to work, Gradle has to set up compile classpaths like this:
- main
-
main module dependencies
- generated
-
generated module dependencies, main output
And runtime classpaths like this:
- main
-
main module dependencies, main output, generated module dependencies, generated output
- generated
-
N/A
Sadly, i haven’t worked out how to do this.
Ideally, it should be possible to do:
./gradlew run
And even:
./gradlew installDist build/install/gradle-twinset-app/bin/gradle-twinset-app
But those don’t work. The neither the output nor the module dependencies of the generated source set makes it onto the run classpath, or into the distribution.
Bafflingly, a simple run task defined in the build script works fine:
./gradlew runProperly