Le 2023-10-29 à 21 h 36, Romain Manni-Bucau a écrit :

Was referencing the options using module names, if you drop the dep or reference a package not supported by the module we should be able to fail.

I do not want to distract this thread from the core issue (control on class-path versus module-path), but I believe that above concern can be avoided. Lets take --add-exports as an example. The syntax of the option passed to javac is:

   --add-exports source/package=target

Where /source/ and /target/ are module names. For example if a project is a module named "my.project" and that module is using the "org.junit" module as a dependency, we may want to add the following option:

   --add-exports my.project/my.internal.package=org.junit

It is possible to design the Maven POM in such a way that those modules are inferred from the context. The POM could look like this (simplified):

   <artifactId>my-project</artifactId>
   <!-- with a module-info declaring "my.project" -->

   <dependencies>
      <dependency>
        <artifactId>junit</artifactId>
        <!-- with a module-info declaring "org.junit" -->
        <scope>test</scope>
        <add-exports>
          <packages>
            <package>my.internal.package</package>
            <!-- Repeat for other packages to export -->
          </packages>
        </add-exports>
      </dependency>
   </dependencies>

Above would mean: if the JUnit dependency is added on the module-path (which happens only during tests), then automatically generate --add-exports options with:

 * The enclosing project ("my.project") as the source module.
 * The enclosing dependency ("org.junit") as the target module.
 * The specified <package> elements as the packages to exports.

A similar approach can be applied to other options. That way, module names do not appear anywhere and the inconsistency risk does not exist. This proposal does not cover all cases, but would provide a safe and easy way for probably the majority of cases. If a user needs to specify different modules than the ones inferred from the context (s)he can still add the --add-exports option manually on the command-line.

    Martin

Reply via email to