2017-10-18 37 views
0

這裏java9/com/vipin/exp/A.class是文件I想用於jdk 9和其他版本的java8/com/vipin/exp/A.class。爲此,我正在嘗試創建多個發佈jar但出現錯誤。這個命令有什麼問題?創建多版本jar時出錯「條目:A.class,包含一個內部名稱爲com.vipin.exp.A的類,名稱不匹配」

[email protected]:~/javacode$ pwd 
    /Users/XXXX/javacode 
[email protected]:~/javacode$ javac --release 9 -d /Users/nitinkumarsharma/javacode/java9/ java9/com/vipin/exp/A.java 
[email protected]:~/javacode$ javac --release 8 -d /Users/nitinkumarsharma/javacode/java8/ java8/com/vipin/exp/A.java 
[email protected]:~/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 

我的目錄結構是:

[email protected]:~/javacode$ tree 
. 
|____java8 
| |____com 
| | |____vipin 
| | | |____exp 
| | | | |____A.class 
| | | | |____A.java 
|____java9 
| |____com 
| | |____vipin 
| | | |____exp 
| | | | |____A.class 
| | | | |____A.java 

它運作良好時,我只用一個類文件創建罐子,像下面

[email protected]:~/javacode$ jar -c -f vipin.jar -C java8/com/vipin/exp/ . 
[email protected]:~/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 
[email protected]:~/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 
+0

我認爲您正在尋找'jar -c -f vipin.jar -C java8。 --release 9 -C java9 .' - 否則類文件將被複制到版本化部分的頂級目錄或頂級目錄中。 –

+0

@AlanBateman運行完命令後「解析文件參數出錯嘗試'jar --help'以獲取更多信息。」 – Vipin

+0

@AlanBateman我不明白我早些時候如何複製錯誤的命令,但現在可用的那個現在爲我工作。我對-C選項的理解是錯誤的。 – Vipin

回答

0

我的C選項的理解是錯誤的,我應該在-C之後給出頂級目錄。

[email protected]:~/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 
[email protected]:~/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 

命令曾在上述問題產生錯誤的輸出給定,正確的是下面,您可以在TVF輸出看到的類文件是在正確的結構可用的COM/VIPIN/EXP /的A.class

[email protected]:~/javacode$ jar -c -f vipin_test.jar -C java8 . 
[email protected]:~/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 

一些更多的命令顯示它的工作完美。

[email protected]:~/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) 
[email protected]:~/javacode$ java -cp vipin.jar com.vipin.exp.A 
Inside java9 version 
[email protected]:~/javacode$ /Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/bin/java -version 
java version "1.8.0_111" 
[email protected]:~/javacode$ /Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/bin/java -cp vipin.jar com.vipin.exp.A 
Inside java8 version