Commits
Tarun Sukhani authored 9915e038ed5
feat: playDeps task with -Psync support (PF-90) Mirrors python `play deps` and `play deps --sync`. The audit incorrectly marked play deps as fully covered by extractPlayModules, but that only populated modules/<name>/ — not lib/. Some workflows (Dockerfile pre-step, deployment artifacts that ship lib/, IDE tooling that reads lib/ directly) still need the resolved Maven deps materialized as files in app/lib/. Behavior: - `gradle playDeps`: copies all Gradle-resolved deps into projectDir/lib/. Skips files unchanged (size-based comparison). Idempotent. - `gradle playDeps -Psync`: same as above PLUS deletes any jars in lib/ that aren't in the current resolution. Mirrors python's --sync flag, which became -Dsync in DependenciesManager. Filters the resolved set the same way playBundle does: skip framework jars (they live at frameworkPath, not in app's lib), skip module lib jars (they live in modules/<name>/lib via extractPlayModules), skip the destination lib/ to avoid copying files onto themselves. Verified against jclaw: 122 deps resolved, copied to lib/. Seeded a stale jar, plain playDeps left it in place. -Psync correctly removed it. Second sync run was a no-op (idempotent). Note: in the typical Gradle workflow, lib/ doesn't actually need to be populated — playRun/Start/etc pull deps directly from Gradle's resolved runtimeClasspath. playDeps is for workflows that explicitly need lib/ (deployment artifacts, IDE tooling, Docker patterns inherited from the python CLI era).