4

Following up on How to define qualified exports to unknown modules? I've posted a testcase with two modules: core and plugin.

core tries to expose a package to plugin using qualified exports but the compiler complains that plugin does not exist. Following up on Alan Bateman's recommendation, I tried adding --module-source-path <path-of-plugin> --module plugin pointing from core to plugin but the compiler complains:

module plugin not found in source path

Why isn't the compiler able to find module plugin?

Gili
  • 86,244
  • 97
  • 390
  • 689
  • Just to clarify this is `maven-compiler-plugin` complaining or `javac`? – Naman Dec 11 '18 at 01:18
  • @nullpointer Both give the same error. I get this same error running `javac` directly. You can run `mvn clean install -X` to get the `javac` command-line being invoked, then run it manually. – Gili Dec 11 '18 at 02:53
  • Would be good to share the complete `javac` command here as well. It would bring clarity if something might be missing in the actual use case you're driving. – Naman Dec 11 '18 at 03:25

1 Answers1

2

I figured it out through trial and error.

  1. Use --module-source-path ${project.basedir}/../*/src/main/java to make sure the compiler can see the source-code of both modules.
  2. Use --module core to make sure that the compiler only builds core in spite of seeing all modules.
  3. Tell maven-jar-plugin to package classes from classes/${module.name} instead of just classes because module-source-path causes the output to be prefixed by the module name. I have not found a way to disable this prefix.

The fixed code can be found at https://bitbucket.org/cowwoc/qualified-exports-testcase/

Caveat: This technique only works if the module directory name (the component resolved by *) matches the Java module name. In this particular example the module core had its sources in directory core/src/main/java. If, on the other hand, the directory name was core but the corresponding Java module was org.bitbucket.core then the compilation would fail with module org.bitbucket.core not found in module source path.

Gili
  • 86,244
  • 97
  • 390
  • 689