By setting Multi-Release: true
in the MANIFEST.MF file, the Jar file becomes a multi-release Jar and the Java runtime (as long as it supports the MRJAR format) will pick the appropriate versions of classes depending on the current major version.
The structure of such a Jar is the following:
jar root
- A.class
- B.class
- C.class
- D.class
- META-INF
- versions
- 9
- A.class
- B.class
- 10
- A.class
root/META-INF/versions/9
, while C and D will be loaded from the base entry.root/META-INF/versions/10
.