On 8/9/2022 2:23 PM, Andrejus Chaliapinas wrote:
Are these two JARs built from code you control?

No, they are all Open Source

Are they third-party dependencies of your application, or fourth-party?

Also, what did their maintainer say when you pointed out the existence of split packages, and how they make it difficult to use the JARs as automatic modules?

When you're faced with code that's aggressively unmodular, it seems attractive for the JDK to come swinging to the rescue with a power-user command-line option to tweak the environment just so. But these options accumulate in scripts (and then get forgotten about), and they interact with other options in surprising ways that generate new requests for further tweaks. Options that duplicate functionality found outside the JDK (e.g., --exclude-modules vs. POM <exclusions>) impose an even bigger cost, as people need to understand the differences, get confused when the option doesn't work like the external tool, etc. The best and most maintainable path is to fix the legacy JARs so they work cleanly as automatic modules.

Alex

If not, then trying to
figure out if your application "works" when only JAR1 is present, or
only JAR2 is present, sounds difficult.

It's actually not difficult - set of tests runs over and checks runtime 
behaviour. And passing extra argument to either Surefire for UTs or Failsafe 
for ITs/etc. plugins configs is trivial.

And introducing
--exclude-modules to "fight" the dependencies resolved by Maven is a bad
idea.

I see this option as extra flexibility for complex projects. It's not about 
"fight" here, but about fast way of figuring out what is actually 
needed/suitable and allowing gradual migrations. Cause dealing with Maven exclusions in 
POMs (even if that is final goal to fully eliminate conflicts) is more difficult till 
some extent.

One side use case here is presence of jars with key word in their names (like "byte" or 
"native"), which are invalid from Java modules angle, but quite often are yet Automatic 
as not migrated to support Java modules. So then workaround is either injecting extra Manifest 
entry by some Maven plugin or renaming overall jar. Both activities are less trivial comparing to 
proposed option.

Andrejus



On Tuesday, August 9, 2022, 10:03:56 PM GMT+1, Alex Buckley 
<alex.buck...@oracle.com> wrote:





On 8/9/2022 1:07 PM, Andrejus Chaliapinas wrote:
Have you tried java --validate-modules? This option will scan the
module path split package for other issues so that you get a dump of all
issues.

Yes, that was my starting point, i.e usage of --validate-modules. But
seeing outcome of it for complex dependencies set led to this my
proposal actually. Cause validate shows conflicts, but elimination of
them takes effort via build tooling configs. And much easier would be
initially to evaluate runtime outcome via flexible exclusion capability
(i.e. in a way we have for Maven dependencies exclusions for example).

Are these two JARs built from code you control? If not, then trying to
figure out if your application "works" when only JAR1 is present, or
only JAR2 is present, sounds difficult. And introducing
--exclude-modules to "fight" the dependencies resolved by Maven is a bad
idea.

Alex

Reply via email to