Skip to content

Add all discovered modules from the classpath to compile tasks - #792

Open
SamCarlberg wants to merge 15 commits into
wpilibsuite:mainfrom
SamCarlberg:automatic-modules
Open

SamCarlberg wants to merge 15 commits into
wpilibsuite:mainfrom
SamCarlberg:automatic-modules

Conversation

@SamCarlberg

@SamCarlberg SamCarlberg commented Jul 19, 2025 •

Copy link
Copy Markdown
Member

Allows user programs to use import module statements without needing to write module-info.java files (and keep them up to date as they add vendor libraries)

See wpilibsuite/allwpilib#7424

Note that CI checks will fail until EJML is modularized. It currently splits packages across multiple JARs, which is disallowed by the Java module system.

Allows user programs to use `import module` statements without needing to write `module-info,java` files (and keep them up to date as they add vendor libraries)
@SamCarlberg

SamCarlberg commented Jul 19, 2025 •

Copy link
Copy Markdown
Member Author

Here's an example of the debug output with modularized versions of WPILib, EJML, and OpenCV:

2026-09-26T22:43:47.419-0400 [DEBUG] [org.gradle.api.Project] Found module-info.class in dependency /home/sam/.gradle/caches/modules-2/files-2.1/io.avaje/avaje-json-core/3.14/23cfcc0655c8da03dc9c8c8dcda5141e5357984d/avaje-json-core-3.14.jar
2026-09-26T22:43:47.419-0400 [DEBUG] [org.gradle.api.Project] Found module-info.class in dependency /home/sam/.gradle/caches/modules-2/files-2.1/io.avaje/avaje-jsonb-inject-plugin/3.14/ac5e9a564fc0c29a946bb449df2f45061453edee/avaje-jsonb-inject-plugin-3.14.jar
2026-09-26T22:43:47.419-0400 [DEBUG] [org.gradle.api.Project] Found module-info.class in dependency /home/sam/.gradle/caches/modules-2/files-2.1/io.avaje/avaje-jsonb/3.14/1de28a9835eebf6af83bfe3f4194690f2d66fa7f/avaje-jsonb-3.14.jar
2026-09-26T22:43:47.419-0400 [DEBUG] [org.gradle.api.Project] Did not find any module information in dependency /home/sam/.gradle/caches/modules-2/files-2.1/junit/junit/4.12/2973d150c0dc1fefe998f834810d68f278ea58ec/junit-4.12.jar - it will be left on the classpath
2026-09-26T22:43:47.419-0400 [DEBUG] [org.gradle.api.Project] Found module-info.class in dependency /home/sam/.gradle/caches/modules-2/files-2.1/org.ejml/ejml-java9module/0.46.0/56e050db7f97d6380056b3ccc7febb0f03a8e742/ejml-java9module-0.46.0.jar
2026-09-26T22:43:47.419-0400 [DEBUG] [org.gradle.api.Project] Did not find any module information in dependency /home/sam/.gradle/caches/modules-2/files-2.1/org.hamcrest/hamcrest-core/1.3/42a25dc3219429f0e5d060061f71acb49bf010a0/hamcrest-core-1.3.jar - it will be left on the classpath
2026-09-26T22:43:47.419-0400 [DEBUG] [org.gradle.api.Project] Found module-info.class in dependency /home/sam/.gradle/caches/modules-2/files-2.1/org.wpilib.allwpilib/allwpilib-java/2027.0.0-alpha-7-63-gae53888dd/8e959dace753ac993db899b1941eb22117944dea/allwpilib-java-2027.0.0-alpha-7-63-gae53888dd.jar
2026-09-26T22:43:47.419-0400 [DEBUG] [org.gradle.api.Project] Found module-info.class in dependency /home/sam/.gradle/caches/modules-2/files-2.1/org.wpilib.apriltag/apriltag-java/2027.0.0-alpha-7-63-gae53888dd/2d27cd96edf8de283b1cb531230568c548322f8d/apriltag-java-2027.0.0-alpha-7-63-gae53888dd.jar
2026-09-26T22:43:47.420-0400 [DEBUG] [org.gradle.api.Project] Found module-info.class in dependency /home/sam/.gradle/caches/modules-2/files-2.1/org.wpilib.cameraserver/cameraserver-java/2027.0.0-alpha-7-63-gae53888dd/3b89a19da5ba7f863b5a9e7d82a53497df6fc738/cameraserver-java-2027.0.0-alpha-7-63-gae53888dd.jar
2026-09-26T22:43:47.420-0400 [DEBUG] [org.gradle.api.Project] Found module-info.class in dependency /home/sam/.gradle/caches/modules-2/files-2.1/org.wpilib.cscore/cscore-java/2027.0.0-alpha-7-63-gae53888dd/a285182fb135dd7ec2b0d67507535530b1bfbb76/cscore-java-2027.0.0-alpha-7-63-gae53888dd.jar
2026-09-26T22:43:47.420-0400 [DEBUG] [org.gradle.api.Project] Found module-info.class in dependency /home/sam/.gradle/caches/modules-2/files-2.1/org.wpilib.datalog/datalog-java/2027.0.0-alpha-7-63-gae53888dd/ab1f29f1d36bef9f2a7acf30906ebd26a3689e23/datalog-java-2027.0.0-alpha-7-63-gae53888dd.jar
2026-09-26T22:43:47.420-0400 [DEBUG] [org.gradle.api.Project] Found module-info.class in dependency /home/sam/.gradle/caches/modules-2/files-2.1/org.wpilib.drivers/drivers-java/2027.0.0-alpha-7-63-gae53888dd/a781da4ec4efc1eb9b6d366024f58f2e93d29f92/drivers-java-2027.0.0-alpha-7-63-gae53888dd.jar
2026-09-26T22:43:47.420-0400 [DEBUG] [org.gradle.api.Project] Found module-info.class in dependency /home/sam/.gradle/caches/modules-2/files-2.1/org.wpilib.epilogue/epilogue-runtime-java/2027.0.0-alpha-7-63-gae53888dd/8f317c7e608432e643ccdcbb6fa611c46eef2045/epilogue-runtime-java-2027.0.0-alpha-7-63-gae53888dd.jar
2026-09-26T22:43:47.420-0400 [DEBUG] [org.gradle.api.Project] Found module-info.class in dependency /home/sam/.gradle/caches/modules-2/files-2.1/org.wpilib.fields/fields-java/2027.0.0-alpha-7-63-gae53888dd/9fb1d2f792fa09d55c55af521e38e4a53dfd5c5b/fields-java-2027.0.0-alpha-7-63-gae53888dd.jar
2026-09-26T22:43:47.420-0400 [DEBUG] [org.gradle.api.Project] Found module-info.class in dependency /home/sam/.gradle/caches/modules-2/files-2.1/org.wpilib.hal/hal-java/2027.0.0-alpha-7-63-gae53888dd/c6e9c8c6100c5aefa0ee0a84c6d18f810d6e40d4/hal-java-2027.0.0-alpha-7-63-gae53888dd.jar
2026-09-26T22:43:47.420-0400 [DEBUG] [org.gradle.api.Project] Found module-info.class in dependency /home/sam/.gradle/caches/modules-2/files-2.1/org.wpilib.ntcore/ntcore-java/2027.0.0-alpha-7-63-gae53888dd/821923af64904b070a4b94e6c8c4a7e9fba6227f/ntcore-java-2027.0.0-alpha-7-63-gae53888dd.jar
2026-09-26T22:43:47.420-0400 [DEBUG] [org.gradle.api.Project] Found module-info.class in dependency /home/sam/.gradle/caches/modules-2/files-2.1/org.wpilib.telemetry/telemetry-java/2027.0.0-alpha-7-63-gae53888dd/1236eff9df28a2ef41e03e40cd645d095963aae/telemetry-java-2027.0.0-alpha-7-63-gae53888dd.jar
2026-09-26T22:43:47.420-0400 [DEBUG] [org.gradle.api.Project] Found Automatic-Module-Name manifest entry 'org.opencv' in dependency /home/sam/.gradle/caches/modules-2/files-2.1/org.wpilib.thirdparty.opencv/opencv-java/2027-4.13.0-4/c0941533f16d60f9eb8d92e84c6bd2b5a809ae08/opencv-java-2027-4.13.0-4.jar
2026-09-26T22:43:47.420-0400 [DEBUG] [org.gradle.api.Project] Found module-info.class in dependency /home/sam/.gradle/caches/modules-2/files-2.1/org.wpilib.tunables/tunables-java/2027.0.0-alpha-7-63-gae53888dd/a36b19fedd7f7868f57881acb1ddd311f850c64a/tunables-java-2027.0.0-alpha-7-63-gae53888dd.jar
2026-09-26T22:43:47.420-0400 [DEBUG] [org.gradle.api.Project] Found module-info.class in dependency /home/sam/.gradle/caches/modules-2/files-2.1/org.wpilib.wpilibj/wpilibj-java/2027.0.0-alpha-7-63-gae53888dd/4931895a7e2ee9098f1f568b9fb383cad1d48e72/wpilibj-java-2027.0.0-alpha-7-63-gae53888dd.jar
2026-09-26T22:43:47.420-0400 [DEBUG] [org.gradle.api.Project] Found module-info.class in dependency /home/sam/.gradle/caches/modules-2/files-2.1/org.wpilib.wpimath/wpimath-java/2027.0.0-alpha-7-63-gae53888dd/cbf2508b92f5ae6025434d376d80037c7b34708f/wpimath-java-2027.0.0-alpha-7-63-gae53888dd.jar
2026-09-26T22:43:47.420-0400 [DEBUG] [org.gradle.api.Project] Found module-info.class in dependency /home/sam/.gradle/caches/modules-2/files-2.1/org.wpilib.wpinet/wpinet-java/2027.0.0-alpha-7-63-gae53888dd/948907507d92542d35dc25de7233482d9232c905/wpinet-java-2027.0.0-alpha-7-63-gae53888dd.jar
2026-09-26T22:43:47.420-0400 [DEBUG] [org.gradle.api.Project] Found module-info.class in dependency /home/sam/.gradle/caches/modules-2/files-2.1/org.wpilib.wpiunits/wpiunits-java/2027.0.0-alpha-7-63-gae53888dd/962b1a792fe8637ee4536cc55ce3f14711f365c8/wpiunits-java-2027.0.0-alpha-7-63-gae53888dd.jar
2026-09-26T22:43:47.420-0400 [DEBUG] [org.gradle.api.Project] Found module-info.class in dependency /home/sam/.gradle/caches/modules-2/files-2.1/org.wpilib.wpiutil/wpiutil-java/2027.0.0-alpha-7-63-gae53888dd/179d9e5f3e02b7d7d1a3f806c393df1dfbda8b2e/wpiutil-java-2027.0.0-alpha-7-63-gae53888dd.jar
2026-09-26T22:43:47.420-0400 [DEBUG] [org.gradle.api.Project] Found module-info.class in dependency /home/sam/.gradle/caches/modules-2/files-2.1/org.wpilib/annotations-java/2027.0.0-alpha-7-63-gae53888dd/931c8a8ab6d6aca08ccdcada3deb7e69d5589b8a/annotations-java-2027.0.0-alpha-7-63-gae53888dd.jar
2026-09-26T22:43:47.420-0400 [DEBUG] [org.gradle.api.Project] Found Automatic-Module-Name manifest entry 'us.hebi.quickbuf.runtime' in dependency /home/sam/.gradle/caches/modules-2/files-2.1/us.hebi.quickbuf/quickbuf-runtime/1.4/2dd03559dfbc9b4d00ba0c3b1032b070399dbb4c/quickbuf-runtime-1.4.jar
2026-09-26T22:43:47.424-0400 [DEBUG] [org.gradle.api.Project] Adding modules to the compile task `compileTestJava`:
2026-09-26T22:43:47.424-0400 [DEBUG] [org.gradle.api.Project] Adding module wpilib.telemetry from file:///home/sam/.gradle/caches/modules-2/files-2.1/org.wpilib.telemetry/telemetry-java/2027.0.0-alpha-7-63-gae53888dd/1236eff9df28a2ef41e03e40cd645d095963aae/telemetry-java-2027.0.0-alpha-7-63-gae53888dd.jar
2026-09-26T22:43:47.424-0400 [DEBUG] [org.gradle.api.Project] Adding module wpilib.ntcore from file:///home/sam/.gradle/caches/modules-2/files-2.1/org.wpilib.ntcore/ntcore-java/2027.0.0-alpha-7-63-gae53888dd/821923af64904b070a4b94e6c8c4a7e9fba6227f/ntcore-java-2027.0.0-alpha-7-63-gae53888dd.jar
2026-09-26T22:43:47.424-0400 [DEBUG] [org.gradle.api.Project] Adding module wpilib from file:///home/sam/.gradle/caches/modules-2/files-2.1/org.wpilib.allwpilib/allwpilib-java/2027.0.0-alpha-7-63-gae53888dd/8e959dace753ac993db899b1941eb22117944dea/allwpilib-java-2027.0.0-alpha-7-63-gae53888dd.jar
2026-09-26T22:43:47.424-0400 [DEBUG] [org.gradle.api.Project] Adding module wpilib.datalog from file:///home/sam/.gradle/caches/modules-2/files-2.1/org.wpilib.datalog/datalog-java/2027.0.0-alpha-7-63-gae53888dd/ab1f29f1d36bef9f2a7acf30906ebd26a3689e23/datalog-java-2027.0.0-alpha-7-63-gae53888dd.jar
2026-09-26T22:43:47.424-0400 [DEBUG] [org.gradle.api.Project] Adding module wpilib.hal from file:///home/sam/.gradle/caches/modules-2/files-2.1/org.wpilib.hal/hal-java/2027.0.0-alpha-7-63-gae53888dd/c6e9c8c6100c5aefa0ee0a84c6d18f810d6e40d4/hal-java-2027.0.0-alpha-7-63-gae53888dd.jar
2026-09-26T22:43:47.424-0400 [DEBUG] [org.gradle.api.Project] Adding module us.hebi.quickbuf.runtime from file:///home/sam/.gradle/caches/modules-2/files-2.1/us.hebi.quickbuf/quickbuf-runtime/1.4/2dd03559dfbc9b4d00ba0c3b1032b070399dbb4c/quickbuf-runtime-1.4.jar
2026-09-26T22:43:47.424-0400 [DEBUG] [org.gradle.api.Project] Adding module wpilib.util from file:///home/sam/.gradle/caches/modules-2/files-2.1/org.wpilib.wpiutil/wpiutil-java/2027.0.0-alpha-7-63-gae53888dd/179d9e5f3e02b7d7d1a3f806c393df1dfbda8b2e/wpiutil-java-2027.0.0-alpha-7-63-gae53888dd.jar
2026-09-26T22:43:47.424-0400 [DEBUG] [org.gradle.api.Project] Adding module io.avaje.jsonb.plugin from file:///home/sam/.gradle/caches/modules-2/files-2.1/io.avaje/avaje-jsonb-inject-plugin/3.14/ac5e9a564fc0c29a946bb449df2f45061453edee/avaje-jsonb-inject-plugin-3.14.jar
2026-09-26T22:43:47.424-0400 [DEBUG] [org.gradle.api.Project] Adding module wpilib.apriltag from file:///home/sam/.gradle/caches/modules-2/files-2.1/org.wpilib.apriltag/apriltag-java/2027.0.0-alpha-7-63-gae53888dd/2d27cd96edf8de283b1cb531230568c548322f8d/apriltag-java-2027.0.0-alpha-7-63-gae53888dd.jar
2026-09-26T22:43:47.424-0400 [DEBUG] [org.gradle.api.Project] Adding module wpilib.drivers from file:///home/sam/.gradle/caches/modules-2/files-2.1/org.wpilib.drivers/drivers-java/2027.0.0-alpha-7-63-gae53888dd/a781da4ec4efc1eb9b6d366024f58f2e93d29f92/drivers-java-2027.0.0-alpha-7-63-gae53888dd.jar
2026-09-26T22:43:47.424-0400 [DEBUG] [org.gradle.api.Project] Adding module wpilib.core from file:///home/sam/.gradle/caches/modules-2/files-2.1/org.wpilib.wpilibj/wpilibj-java/2027.0.0-alpha-7-63-gae53888dd/4931895a7e2ee9098f1f568b9fb383cad1d48e72/wpilibj-java-2027.0.0-alpha-7-63-gae53888dd.jar
2026-09-26T22:43:47.424-0400 [DEBUG] [org.gradle.api.Project] Adding module wpilib.epilogue from file:///home/sam/.gradle/caches/modules-2/files-2.1/org.wpilib.epilogue/epilogue-runtime-java/2027.0.0-alpha-7-63-gae53888dd/8f317c7e608432e643ccdcbb6fa611c46eef2045/epilogue-runtime-java-2027.0.0-alpha-7-63-gae53888dd.jar
2026-09-26T22:43:47.424-0400 [DEBUG] [org.gradle.api.Project] Adding module wpilib.math from file:///home/sam/.gradle/caches/modules-2/files-2.1/org.wpilib.wpimath/wpimath-java/2027.0.0-alpha-7-63-gae53888dd/cbf2508b92f5ae6025434d376d80037c7b34708f/wpimath-java-2027.0.0-alpha-7-63-gae53888dd.jar
2026-09-26T22:43:47.424-0400 [DEBUG] [org.gradle.api.Project] Adding module wpilib.net from file:///home/sam/.gradle/caches/modules-2/files-2.1/org.wpilib.wpinet/wpinet-java/2027.0.0-alpha-7-63-gae53888dd/948907507d92542d35dc25de7233482d9232c905/wpinet-java-2027.0.0-alpha-7-63-gae53888dd.jar
2026-09-26T22:43:47.424-0400 [DEBUG] [org.gradle.api.Project] Adding module org.opencv from file:///home/sam/.gradle/caches/modules-2/files-2.1/org.wpilib.thirdparty.opencv/opencv-java/2027-4.13.0-4/c0941533f16d60f9eb8d92e84c6bd2b5a809ae08/opencv-java-2027-4.13.0-4.jar
2026-09-26T22:43:47.424-0400 [DEBUG] [org.gradle.api.Project] Adding module wpilib.tunable from file:///home/sam/.gradle/caches/modules-2/files-2.1/org.wpilib.tunables/tunables-java/2027.0.0-alpha-7-63-gae53888dd/a36b19fedd7f7868f57881acb1ddd311f850c64a/tunables-java-2027.0.0-alpha-7-63-gae53888dd.jar
2026-09-26T22:43:47.424-0400 [DEBUG] [org.gradle.api.Project] Adding module io.avaje.json from file:///home/sam/.gradle/caches/modules-2/files-2.1/io.avaje/avaje-json-core/3.14/23cfcc0655c8da03dc9c8c8dcda5141e5357984d/avaje-json-core-3.14.jar
2026-09-26T22:43:47.424-0400 [DEBUG] [org.gradle.api.Project] Adding module wpilib.gamefields from file:///home/sam/.gradle/caches/modules-2/files-2.1/org.wpilib.fields/fields-java/2027.0.0-alpha-7-63-gae53888dd/9fb1d2f792fa09d55c55af521e38e4a53dfd5c5b/fields-java-2027.0.0-alpha-7-63-gae53888dd.jar
2026-09-26T22:43:47.424-0400 [DEBUG] [org.gradle.api.Project] Adding module io.avaje.jsonb from file:///home/sam/.gradle/caches/modules-2/files-2.1/io.avaje/avaje-jsonb/3.14/1de28a9835eebf6af83bfe3f4194690f2d66fa7f/avaje-jsonb-3.14.jar
2026-09-26T22:43:47.424-0400 [DEBUG] [org.gradle.api.Project] Adding module ejml.java9module from file:///home/sam/.gradle/caches/modules-2/files-2.1/org.ejml/ejml-java9module/0.46.0/56e050db7f97d6380056b3ccc7febb0f03a8e742/ejml-java9module-0.46.0.jar
2026-09-26T22:43:47.424-0400 [DEBUG] [org.gradle.api.Project] Adding module wpilib.cscore from file:///home/sam/.gradle/caches/modules-2/files-2.1/org.wpilib.cscore/cscore-java/2027.0.0-alpha-7-63-gae53888dd/a285182fb135dd7ec2b0d67507535530b1bfbb76/cscore-java-2027.0.0-alpha-7-63-gae53888dd.jar
2026-09-26T22:43:47.424-0400 [DEBUG] [org.gradle.api.Project] Adding module wpilib.annotation from file:///home/sam/.gradle/caches/modules-2/files-2.1/org.wpilib/annotations-java/2027.0.0-alpha-7-63-gae53888dd/931c8a8ab6d6aca08ccdcada3deb7e69d5589b8a/annotations-java-2027.0.0-alpha-7-63-gae53888dd.jar
2026-09-26T22:43:47.424-0400 [DEBUG] [org.gradle.api.Project] Adding module wpilib.units from file:///home/sam/.gradle/caches/modules-2/files-2.1/org.wpilib.wpiunits/wpiunits-java/2027.0.0-alpha-7-63-gae53888dd/962b1a792fe8637ee4536cc55ce3f14711f365c8/wpiunits-java-2027.0.0-alpha-7-63-gae53888dd.jar
2026-09-26T22:43:47.424-0400 [DEBUG] [org.gradle.api.Project] Adding module wpilib.cameraserver from file:///home/sam/.gradle/caches/modules-2/files-2.1/org.wpilib.cameraserver/cameraserver-java/2027.0.0-alpha-7-63-gae53888dd/3b89a19da5ba7f863b5a9e7d82a53497df6fc738/cameraserver-java-2027.0.0-alpha-7-63-gae53888dd.jar

@PeterJohnson
PeterJohnson changed the base branch from 2027 to main May 19, 2026 01:38
WPILib version bump is needed for access to the umbrella allwpilib-java project

OpenCV bump is needed for the automatic org.opencv module to be available
However, JAR files with no module-info.class and with no fallback Automatic-Module-Name manifest entry will still be excluded from the module path
Add some better top-level documentation for interop with inferModulePath
ThadHouse
ThadHouse previously approved these changes Sep 27, 2026
Comment thread versionupdates.gradle
Comment thread src/main/java/org/wpilib/gradlerio/wpi/WPIMavenExtension.java
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants