0

Here java9/com/vipin/exp/A.class is file I want to use with jdk 9 and for other versions java8/com/vipin/exp/A.class. For this I am trying to create multi release jar but getting below error. What is wrong in this command ?

XXXX@XXX-MacBook-Air.local:~/javacode$ pwd
    /Users/XXXX/javacode
XXXX@XXX-Air:~/javacode$ javac --release 9 -d /Users/nitinkumarsharma/javacode/java9/ java9/com/vipin/exp/A.java
XXXX@XXX-Air:~/javacode$ javac --release 8 -d /Users/nitinkumarsharma/javacode/java8/ java8/com/vipin/exp/A.java
XXXX@XXX-Air:~/javacode$ jar -c -f vipin.jar -C java8/com/vipin/exp/ . --release 9 -C java9/com/vipin/exp/ .

        entry: A.class, contains a class with internal name com.vipin.exp.A, names do not match
        entry: META-INF/versions/9/A.class, contains a new public class not found in base entries
        Warning: entry META-INF/versions/9/A.java, multiple resources with same name
        invalid multi-release jar file vipin.jar deleted

My directory structure is:

XXXX@XXX-MacBook-Air.local:~/javacode$ tree
.
|____java8
| |____com
| | |____vipin
| | | |____exp
| | | | |____A.class
| | | | |____A.java
|____java9
| |____com
| | |____vipin
| | | |____exp
| | | | |____A.class
| | | | |____A.java

It works well when I use only one class file to create jar, like below

XXXX@XXX-MacBook-Air.local:~/javacode$ jar -c -f vipin.jar -C java8/com/vipin/exp/ .
XXXX@XXX-MacBook-Air.local:~/javacode$ ls -ltr
total 12688
drwxr-xr-x  3 XXXX  staff      102 Oct 17 18:02 java8
drwxr-xr-x  3 XXXX  staff      102 Oct 17 20:00 java9
-rw-r--r--  1 XXXX  staff      968 Oct 18 17:05 vipin.jar
XXXX@XXX-MacBook-Air.local:~/javacode$ jar -tvf vipin.jar 
     0 Wed Oct 18 17:05:08 IST 2017 META-INF/
    61 Wed Oct 18 17:05:08 IST 2017 META-INF/MANIFEST.MF
   430 Tue Oct 17 22:55:22 IST 2017 A.class
   136 Tue Oct 17 22:49:20 IST 2017 A.java
Vipin
  • 4,851
  • 3
  • 35
  • 65
  • I think you are looking for `jar -c -f vipin.jar -C java8 . --release 9 -C java9 .` - otherwise the class files will be copied into the top-level directory or the top-level directory of the versioned section. – Alan Bateman Oct 18 '17 at 12:32
  • @AlanBateman After running your command "Error parsing file arguments Try `jar --help' for more information." – Vipin Oct 18 '17 at 13:15
  • @AlanBateman I don't understand how i copied wrong command earlier but the one available there now worked for me. My understanding of -C option was wrong. – Vipin Oct 18 '17 at 13:52

1 Answers1

1

My understanding of -C option was wrong, I should have given top level directory after -C.

XXXX@XXX-MacBook-Air.local:~/javacode$ jar -c -f vipin.jar -C java8 . --release 9 -C java9 .
Warning: entry META-INF/versions/9/com/vipin/exp/A.java, multiple resources with same name
XXXX@XXX-MacBook-Air.local:~/javacode$ jar -tvf vipin.jar 
     0 Wed Oct 18 19:06:26 IST 2017 META-INF/
    82 Wed Oct 18 19:06:26 IST 2017 META-INF/MANIFEST.MF
     0 Tue Oct 17 18:02:04 IST 2017 com/
     0 Tue Oct 17 18:02:04 IST 2017 com/vipin/
     0 Tue Oct 17 23:26:56 IST 2017 com/vipin/exp/
   430 Wed Oct 18 19:00:38 IST 2017 com/vipin/exp/A.class
   136 Tue Oct 17 22:49:20 IST 2017 com/vipin/exp/A.java
     0 Tue Oct 17 20:00:34 IST 2017 META-INF/versions/9/
     0 Tue Oct 17 20:00:34 IST 2017 META-INF/versions/9/com/
     0 Tue Oct 17 20:00:34 IST 2017 META-INF/versions/9/com/vipin/
     0 Tue Oct 17 23:27:04 IST 2017 META-INF/versions/9/com/vipin/exp/
   430 Wed Oct 18 19:02:04 IST 2017 META-INF/versions/9/com/vipin/exp/A.class
   135 Tue Oct 17 22:49:26 IST 2017 META-INF/versions/9/com/vipin/exp/A.java

The command worked given in question above produced wrong output, correct one would be below and you can see in tvf output the class file is available in correct structure com/vipin/exp/A.class

XXXX@XXX-MacBook-Air.local:~/javacode$ jar -c -f vipin_test.jar -C java8 .
XXXX@XXX-MacBook-Air.local:~/javacode$ jar -tvf vipin_test.jar
     0 Wed Oct 18 19:20:18 IST 2017 META-INF/
    61 Wed Oct 18 19:20:18 IST 2017 META-INF/MANIFEST.MF
     0 Tue Oct 17 18:02:04 IST 2017 com/
     0 Tue Oct 17 18:02:04 IST 2017 com/vipin/
     0 Tue Oct 17 23:26:56 IST 2017 com/vipin/exp/
   430 Wed Oct 18 19:00:38 IST 2017 com/vipin/exp/A.class
   136 Tue Oct 17 22:49:20 IST 2017 com/vipin/exp/A.java

Some more commands to show it worked perfectly.

XXXX@XXX-MacBook-Air.local:~/javacode$ java -version
java version "9"
Java(TM) SE Runtime Environment (build 9+181)
Java HotSpot(TM) 64-Bit Server VM (build 9+181, mixed mode)
XXXX@XXX-MacBook-Air.local:~/javacode$ java -cp vipin.jar com.vipin.exp.A
Inside java9 version
XXXX@XXX-MacBook-Air.local:~/javacode$ /Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/bin/java -version
java version "1.8.0_111"
XXXX@XXX-MacBook-Air.local:~/javacode$ /Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/bin/java -cp vipin.jar com.vipin.exp.A
Inside java8 version
Vipin
  • 4,851
  • 3
  • 35
  • 65