Compiling classes for multi-release JAR with

Alan Bateman Alan.Bateman at
Sat Feb 11 17:40:26 UTC 2017

On 10/02/2017 23:06, Gunnar Morling wrote:

> :
> If I don't have a module descriptor things work fine:
>      javac --source-path=src/main/java -d target/classes --release 8
> $(find src/main/java -name "*.java")
>      javac --source-path=src/main/java9 -cp target/classes -d
> target/classes-java9 --release 9 $(find src/main/java9 -name "*.java")
>      jar --create --file mr.jar -C target/classes . --release 9 -C
> target/classes-java9 .
> Specifically, the second javac call picks up the (shared) class file
> for "Version" from the classpath by pointing to the output directory
> of the first compilation.
> Things fail when adding a module descriptor:
>      --- src/main/java9/
>          module com.example {
>      }
>      ---
It is complicated but I think the reason you are running into issues is 
because the second javac command is essentially compiling a module with 
references to types on the class path.

If you move the to the top-level directory directory 
then I would expect this should work:

javac --release 8 -d target/classes src/main/java/com/example/ 
javac -d target/classes src/main/java/
javac -d target/classes-java9 -cp target/classes 
jar --create --file mr.jar -C target/classes . --release 9 -C 
target/classes-java9 .

Jon might have other suggestions.


More information about the jigsaw-dev mailing list