当springboot项目有外部本地jar引用,本地idea运行正常,当打包后命令行运行,运行报以下错误:
Exception in thread "main" java.lang.NoClassDefFoundError: com/ys/product/ysmq/front/msg/AbstractConsumerMessage$ConsumerCallBack
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Unknown Source)
at java.lang.Class.getDeclaredMethod(Unknown Source)
at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:47)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:107)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:58)
at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:88)
Caused by: java.lang.ClassNotFoundException: com.ys.product.ysmq.front.msg.AbstractConsumerMessage$ConsumerCallBack
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at org.springframework.boot.loader.LaunchedURLClassLoader.loadClass(LaunchedURLClassLoader.java:151)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 7 more
百度了半天,才找到原因,springboot打包没有把本地jar打包进去,需要修改配置pow.xml
如下:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<mainClass>com.ydwh.gf.YdwhApplication</mainClass> <!-- 指定启动主类 -->
<fork>true</fork> <!-- 如果没有该配置,devtools不会生效 打包 将外部jar包打包进项目中 -->
<includeSystemScope>true</includeSystemScope> <!-- 打包 将外部jar包打包进项目中 -->
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
再次打包运行,正常了