-
Notifications
You must be signed in to change notification settings - Fork 1.3k
Description
Reliable builds during development with support for combined gradle & IntelliJ IDEA.
I have a sort of roadmap for this. Maybe it's the sort of thing that should be a Milestone or have a Project board, but I'll start by writing here so it's someplace besides my head:
- [regression] gradle does not provide modules/*.jar for transient dependencies (regression) #4014: transient
modules/*.jar
- docs: remove mentions of
gradlew idea
and iml files from wiki:Developing Modules - determine whether
gradlew idea
andgradlew cleanIdea
do harmful things and if we need to disable them - gradle
terasology-modules
plugin. started by Convert the module build script to a precompiled plugin #3993.- extract
cacheReflections
task. work in progress, gradle plugin for cacheReflections #4022. also relates to Modules are tied to "org"-namespace #2445. - make terasology-module plugin not depend on
/config/gradle/publish.gradle
. Surprisingly enough, it seems to work, but it is unexpected source code organization and a blocker to the plugin being used outside this repository.// Grab all the common stuff like plugins to use, artifact repositories, code analysis config, Artifactory settings, Git magic
- extract
- refactor: move o.t.benchmarks back in to main source set #4021: reflections and other work with resources will be easier if engine gets rid of its
dev
source set, see gradle: merge engine-tests back in to engine directory #3979 (comment) - make
syncAssets
task (orcopyResourcesToClasses
, as it's called in engine's build) gradle-safe. or make unnecessary by getting Gestalt to allow us to register more than one filesystem-directory to a gestalt-module. see Move all module resources (assets, deltas, overrides) into src/ #4555, letting EngineModule see its assets #3957 &Terasology/engine/build.gradle
Lines 277 to 278 in 9575439
//TODO: Remove it when gestalt will can to handle ProtectionDomain without classes (Resources) task copyResourcesToClasses(type:Copy) { - remove outputDir overrides on IDEA config; colliding gradle and IDEA build directories is an anti-goal.
- in modules:
Terasology/buildSrc/src/main/kotlin/terasology-module.gradle.kts
Lines 235 to 236 in 9575439
outputDir = file("build/classes") testOutputDir = file("build/testClasses") - in engine:
Terasology/engine/build.gradle
Lines 301 to 302 in 9575439
outputDir = file('build/classes') testOutputDir = file('build/testClasses') - in facade:
Terasology/facades/PC/build.gradle
Lines 426 to 427 in 9575439
outputDir = file('build/classes') testOutputDir = file('build/testClasses')
- in modules:
- decouple facade's configuration from engine and module projects. Goal is to improve confidence that engine and all modules will be up-to-date whenever facade's exec targets are launched. Hope is that following multi-project best practices makes this more reliable. See also Decoupled Projects.
- Extract "run game" task configurations #4245: streamline facade's exec tasks. There is a lot of duplication between them. They can probably also take advantage of the java-application
run
task. - IntelliJ mystery: no longer able to effectively rebuild individual modules? Right click module -> Rebuild (if no previous
build
directory) may result in nothing building, yet Build -> Build Project builds it fine (item added and observed by Cerv)
Additional Criteria
- Use task configuration avoidance and lazy configuration to keep big multi-project workspaces fast.
- Retain compatibility with run-time reloading of classes (with IDE) and assets (with gestalt).
Optional Side Quests
- separate module test-dependencies from their application dependencies.
- publish terasology gradle plugin(s) for use from other repositories.
-
extractNatives
- is there a better place for this to be so IntelliJ will recognize it as a dependency and always make sure the libs exist before it runs the facade? does anything else need them other than facades? (e.g. tests, compile-time dependencies)- progress toward this in build(facades.PC): tidy distribution tasks #4347
What you were trying to do
just, like, be consistently able to build and run stuff
What actually happened
I learned more about gradle than I ever wanted to know.
Metadata
Metadata
Assignees
Labels
Type
Projects
Status