问题
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
?
回答1:
I figured it out through trial and error.
- Use
--module-source-path ${project.basedir}/../*/src/main/java
to make sure the compiler can see the source-code of both modules. - Use
--module core
to make sure that the compiler only buildscore
in spite of seeing all modules. - Tell
maven-jar-plugin
to package classes fromclasses/${module.name}
instead of justclasses
becausemodule-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
.
来源:https://stackoverflow.com/questions/53712924/unable-to-resolve-module-using-module-source-path