首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建多版本jar时出错“条目: A.class,包含内部名称com.vipin.exp.A的类,名称不匹配”

创建多版本jar时出错“条目: A.class,包含内部名称com.vipin.exp.A的类,名称不匹配”
EN

Stack Overflow用户
提问于 2017-10-18 12:12:37
回答 1查看 1.2K关注 0票数 0

这里,java9 9/com/vipin/exp/A类是我希望与jdk 9和其他版本java9 8/com/vipin/exp/A.class一起使用的文件。为此,我试图创建多个版本的jar,但会出现以下错误。这个命令有什么问题吗?

代码语言:javascript
复制
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

我的目录结构是:

代码语言:javascript
复制
XXXX@XXX-MacBook-Air.local:~/javacode$ tree
.
|____java8
| |____com
| | |____vipin
| | | |____exp
| | | | |____A.class
| | | | |____A.java
|____java9
| |____com
| | |____vipin
| | | |____exp
| | | | |____A.class
| | | | |____A.java

当我只使用一个类文件创建jar时,它工作得很好,如下所示

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-18 14:09:20

我对-C选项的理解是错误的,我应该在-C之后给出顶级目录。

代码语言:javascript
复制
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

上面给出的命令产生了错误的输出,正确的输出在下面,您可以在tvf输出中看到类文件在正确的结构com/vipin/exp/A中可用。

代码语言:javascript
复制
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

一些更多的命令,以显示它的完美运作。

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46809904

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档