洋芋博客

一个什么都分享的博客

这里是在windows11下使用jar命令进行打包!

解决方法:打包的时候,将类所在的包的所有目录都打包下来,比如有我这里的Animal类,显示的是

package week6.question2;那么打包的时候就至少要把week6这个目录打包进去。

如果要看详细过程的话,把请往下看!

首先,我定义了一个Animal的类并对它进行了编译生成了Animal.class文件,如下

我这里生成的Animal.class的路径为D:\IDEA project\MavenTest\target\classes\week6\question2

然后我就在D:\IDEA project\MavenTest\target\classes\week6这个目录下使用jar命令将question2这个目录打包成Animal.jar(Animal.class在question这个目录下),如下

之后,我就新创建了一个项目来使用这个Animal.jar,我先将Animal.jar导入,然后在这个项目里面创建了一个Cat类和一个Dog类继承Animal类,还创建了一个AnimalTest的测试类,然后编译运行时就报错了,如下

看上图,这里的Animal.jar有只有question2目录和清单文件目录

报错说程序包找不到,可是Animal.jar明明就在那里呀,当时我很纳闷,于是我为了解决这个问题尝试了各种各样的方法,网上那些文章根本解决不了我的问题,搞了快三天也没解决,后来在我的好兄弟和我的一起努力下,终于解决了,就是因为一个小小的细节导致出现这个问题的。

让我们来看看是什么细节!

首先去看Animal这个类,它是包含在packge week6.question2;这个包里面的,如下图

可是,我刚刚是直接对question2这个目录进行的打包,于是Animal.jar文件里面就只有question2目录,但是Animal类所在包为week6.question2,所以编译器在寻找这个week6这个包时找不到,就报了java: 程序包week6.question2不存在 的错误。因此,我们在打包的时候把包名所在的目录都给打包上(我这里要将week6这个目录打包进去),然后问题就解决了,就能成功调用啦!

就像下面这样,

然后我们在使用这个新的Animal.jar,就能成功编译运行了,如下

看上图,这里的Animal.jar有week6目录,也有week6目录下的question2目录。

怎么样,是不是一个很容易忽略的细节!只有遇到了才印象深刻,哈哈哈!如有疑问,请评论区联系我喔!

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注