I have some java9 module that uses 3rd party library that is not Java9 module, just a simple utility jar.
However, the compiler complains that it can't find a package from my utility.
What should I do in module-info.java to enable usage of my 3rd party library?
You can use your library as an automatic module. An automatic module is a module that doesn't have a module descriptor (i.e. module-info.class). But what name should you use to refer to this module? The name of the automatic module is derived from the JAR name (unless this JAR contains an Automatic-Module-Name attribute). The full rule is quite long (see Javadoc for ModuleFinder.of), so for simplicity, you just have to drop the version from its name and then replace all non-alphanumeric characters with dots (.).
For example, if you want to use foo-bar-1.2.3-SNAPSHOT.jar, you need to add the following line to module-info.java:
module <name> {
requires foo.bar;
}
Just to put in simple steps, to use a 3rd party jar(e.g. log4j-api-2.9.1.jar below) in your module:-
Execute the descriptor command of
jartooljar --file=/path/to/your/jar/log4j-api-2.9.1.jar --describe-moduleThis would provide you an output similar to
No module descriptor found. Derived automatic module.
log4j.api@2.9.1 automatic
In your
module-info.java, declare arequiresto that module name as:-module your.module { requires log4j.api; }That's it.
来源:https://stackoverflow.com/questions/46713289/how-to-use-3rd-party-library-in-java9-module