先说一下背景,之前已经打包成功的项目,做了一点修改之后,重新打包。没有对pom做任何修改!!!任何都没有!!!
然后出现了以下若干问题,一一排除。
1、repackage failed: Unable to find main class
首先,第一个问题说是没有找到主类,这个时候,我还以为只是简单的问题(因为之前遇到过这个问题),在pom里加上以下配置。
<configuration>
<mainClass>project.demo.DemoApplication</mainClass>
</configuration>
OK,解决问题,打包成功。
就在我窃窃自喜的时候,并且夸了自己一波的时候,我执行了
java -jar xxx.jar
就出现了下面的问题
2、Exception in thread “main” java.lang.ClassNotFoundException
Exception in thread "main" java.lang.ClassNotFoundException: project.demo.DemoApplication
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at org.springframework.boot.loader.LaunchedURLClassLoader.loadClass(LaunchedURLClassLoader.java:151)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:348)
at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:46)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:108)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:58)
at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:88)
于是,我就开始跑偏了,开始各种搜索。
有说是因为配置的JDK版本不一致的,我去查看了,确实不一致,修改过了。
也有说是因为IDEA的Structure中配置不对的,我查看了,没问题,不过还是尝试了在Artifacts中添加了jar包的配置(如果使用maven进行打包,应该是不需要这步吧)。
尝试了若干操作,都没成功。
于是我把jar解压缩,想要看一下到底他跟之前可以成功运行的jar包有什么区别,于是发现了最终的问题
3、打包好的jar包中没有源码编译后的class文件!!!
之前打包好之后是没有project这个目录的,只有其他四个,也就是所有的资源文件和配置文件都在,就是没有源码编译后的class文件。
于是我又开始了搜索,配置,尝试。没有用,都没有用。
后来我发现一个很奇怪的现象。
就是每次重新加载pom文件之后,都会丢失源码配置,到时程序没有办法运行(这个情况在一开始就有,但是我没有注意)。
打开Structure的Module,每次修改配置之后,在窗口最下方都会有一个下面这样的提示(现在还是有)。
module 'project1' is imported from Maven. Any changes made in its configuration may be lost after reimporting.
之后我就去搜索了maven中确定源码路径的配置,也就是下面这个。
<sourceDirectory>src/main</sourceDirectory>
很奇怪的是,这样写是标红报错的,以致于我最开始写完以为是错的,不停的修改。
后来发现,其实无所谓,因为再进行mvn clean package之后,打包完成的jar包里面该有的都有了,在终端运行也没有问题了。
心态炸裂!!!