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?

Reply via email to