I want to brainstorm improvements we could pursue to the httpcomponents build system. This is not a Maven vs Gradle discussion but rather a discussion about what features would make our lives easier.
1. Parallelized testing. This seems to be working well so far on the `master` branch of httpcore5; combined with the other fixes, the tests are now more reliable for me than they were when they ran serially. I have a similar commit ready to parallelize the client tests, but that won't work reliably until we publish a new release of httpcore5-testing with changes like the loopback binding fix. 2. Code formatting. I'm wasting my life dealing with constant Checkstyle errors, and I'd rather just run an automated code formatter. 3. Test reports. I want HTML test reports I can browse that allow me to easily identify things like long-running tests, or console output for failed test cases. 4. Parallelized builds. There's no reason that e.g. httpcore5-h2 and httpcore5-reactive couldn't build in parallel. In my experience, this feature has never worked properly in Maven; perhaps Maven 4 will improve it? 5. Improved cross-version testing. I'd like an easier way to verify that httpcore changes aren't breaking older versions of httpclient. Japicmp is a good solution, but a partial one: it will detect breaking ABI changes, but not breaking behavioral changes. 6. Improved Java version testing. I currently test against five Java versions: 8, 11, 17, 21, and 25. I do this manually using a `for` loop in the shell, but I'd prefer something more ergonomic. Java sockets were completely reimplemented a few years ago, and I'm regularly finding version-specific issues with socket behavior, TLS, etc. 7. Unified core+client development. I'm not sure how other developers are approaching this, but as I understand it, the options are (1) install httpcore5 locally and make httpclient5 depend on the snapshot version, (2) write a local `pom.xml` in the parent directory that specifies `httpcore5`, `httpclient5`, and perhaps `httpcomponents-parent` as `<modules>`. 8. Improved dependency management. I think the Dependabot approach of getting a pull request for every new minor/patch version release of every dependency is a little nuts; can't these be batched somehow? 9. Exclude optional dependencies from testing. Our current Maven build hides these issues; there's no way to make assertions about how the code behaves when optional dependencies are not present. By default, optional dependencies should not be present when running tests, and tests of optional features should be explicitly tagged so that they can run with those dependencies present. This would solve the repeated issues we've been having with Java linkage errors. 10. Metadata generation for Graal AOT. This is more of a feature request, but the implementation and testing of it require significant work in the build system. There are also interactions with test-time dependency modeling here, e.g.: https://github.com/kohlschutter/junixsocket/issues/170 11. Reproducible builds and SBOM generation. What else?
