2017-10-18 9 views
0

여기서 java9/com/vipin/exp/A.class는 파일 I입니다. jdk 9와 다른 버전의 java8/com/vipin/exp/A.class에 사용하고 싶습니다. 이를 위해 다중 릴리스 항아리를 만들려고하지만 오류가 발생하는 중입니다. 이 명령에서 무엇이 잘못 되었습니까?다중 릴리스 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$ 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 옵션의 나의 이해는 잘못처럼, 항아리를 만드는 하나 개의 클래스 파일을 사용할 때

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

그것은 잘 작동 , -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/비핀/특급/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