Java 9 Modules - Split Packages Example
|
Compiling and running
We have following directory structure:
D:\simple-split-packages>"tree /A /F"
+---core-parser
| \---src
| | module-info.java
| |
| \---parser
| \---xml
| DefaultParser.java
|
\---parser-app
\---src
| module-info.java
|
\---parser
\---xml
AppMain.java
Compiling the first module:
D:\simple-split-packages\core-parser>javac -d out src\module-info.java src\parser\xml\DefaultParser.java
Compiling the second module:
D:\simple-split-packages\parser-app>javac --module-path ../core-parser/out -d out src\module-info.java src\parser\xml\AppMain.java
Compilation done without any error.
Now we have these files:
D:\simple-split-packages>"tree /A /F"
+---core-parser
| +---out
| | | module-info.class
| | |
| | \---parser
| | \---xml
| | DefaultParser.class
| |
| \---src
| | module-info.java
| |
| \---parser
| \---xml
| DefaultParser.java
|
\---parser-app
+---out
| | module-info.class
| |
| \---parser
| \---xml
| AppMain.class
|
\---src
| module-info.java
|
\---parser
\---xml
AppMain.java
Running the second module's main class
D:\simple-split-packages\parser-app>java --module-path ../core-parser/out;out --module parser.app/parser.xml.ParserApp
Error occurred during initialization of boot layer
java.lang.LayerInstantiationException: Package parser.xml in both module core.parser and module parser.app
The exception is clear about split packages situation.
Running on class path
Let's compile and run the application without modules (no module-info.java). Such application actually runs in the unnamed module in Java 9.
We just need to compile the parser.app without module-info.java (the core.parser one will be ignored):
D:\simple-split-packages\parser-app>javac -cp ../core-parser/out -d out2 src\parser\xml\AppMain.java
D:\simple-split-packages\parser-app>java -cp ../core-parser/out;out2 parser.xml.AppMain
do something
For backward compatibility reason, the split packages are allowed in unnamed modules.
Example Project
Dependencies and Technologies Used:
- JDK 9
- simple-split-packages
- core-parser
- src
- parser
- xml
-
DefaultParser.java
-
- xml
-
module-info.java
- parser
- src
- parser-app
- src
- parser
- xml
-
AppMain.java
-
- xml
-
module-info.java
- parser
- src
- core-parser