一、该问题的重现步骤是什么?
分离依懒jar包的打包方式,pom里build标签下的内容如下
<build> <finalName>esr</finalName> <resources> <resource> <directory>src/main/resources</directory> </resource> <resource> <directory>src/main/java</directory> <includes> <include>**/*.xml</include> </includes> </resource> </resources> <pluginManagement> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>${spring.boot.version}</version> <configuration> <finalName>${project.build.finalName}</finalName> </configuration> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> <plugin> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <version>${docker.plugin.version}</version> <configuration> <imageName>${docker.registry.url}/blade/${project.artifactId}:${project.version}</imageName> <dockerDirectory>${project.basedir}</dockerDirectory> <dockerHost>${docker.registry.host}</dockerHost> <resources> <resource> <targetPath>/</targetPath> <directory>${project.build.directory}</directory> <include>${project.build.finalName}.jar</include> </resource> </resources> <registryUrl>${docker.registry.url}</registryUrl> <serverId>${docker.registry.url}</serverId> <pushImage>true</pushImage> </configuration> </plugin> </plugins> </pluginManagement> <plugins> <!-- 打JAR包,不包含依赖文件;显式剔除配置文件 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <configuration> <!--不打包资源文件,剔除配置文件--> <excludes> <exclude>*.**</exclude> <exclude>*/*.xml</exclude> <exclude>*.properties</exclude> <exclude>*.yml</exclude> <exclude>*/*.properties</exclude> <exclude>*/*.yml</exclude> </excludes> <archive> <manifest> <!--将classpath添加到依赖描述 --> <addClasspath>true</addClasspath> <!--MANIFEST.MF 中 Class-Path 加入前缀--> <!--lib文件夹内容,需要 maven-dependency-plugin插件补充--> <classpathPrefix>lib/</classpathPrefix> <!--jar包不包含唯一版本标识--> <useUniqueVersions>false</useUniqueVersions> <!--指定入口类--> <mainClass>org.springblade.Application</mainClass> </manifest> <manifestEntries> <!--MANIFEST.MF 中 Class-Path 加入资源文件目录,加入自定义路径,多个路径用空格隔开--> <!--此处resources文件夹的内容,需要maven-resources-plugin插件补充上--> <Class-Path>./resources/</Class-Path> </manifestEntries> </archive> <outputDirectory>${project.build.directory}</outputDirectory> </configuration> </plugin> <!--拷贝依赖 copy-dependencies--> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <executions> <execution> <id>copy-dependencies</id> <phase>package</phase> <goals> <goal>copy-dependencies</goal> </goals> <configuration> <outputDirectory> ${project.build.directory}/lib/ </outputDirectory> </configuration> </execution> </executions> </plugin> <!--拷贝资源文件 copy-resources--> <plugin> <artifactId>maven-resources-plugin</artifactId> <executions> <execution> <id>copy-resources</id> <phase>package</phase> <goals> <goal>copy-resources</goal> </goals> <configuration> <resources> <resource> <directory>src/main/resources</directory> <includes> <include>*.properties</include> <include>*.yml</include> <include>*/*.properties</include> <include>*/*.properties</include> <include>**/*.xml</include> </includes> </resource> <resource> <directory>src/main/java</directory> <includes> <include>**/*.xml</include> </includes> </resource> </resources> <outputDirectory>${project.build.directory}/resources</outputDirectory> </configuration> </execution> </executions> </plugin> <!--spring boot repackage,依赖 maven-jar-plugin 打包的jar包 重新打包成 spring boot 的jar包--> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <!--重写包含依赖,包含不存在的依赖,jar里没有pom里的依赖--> <includes> <include> <groupId>non-exists</groupId> <artifactId>non-exists</artifactId> </include> </includes> <layout>ZIP</layout> <!--使用外部配置文件,jar包里没有资源文件--> <addResources>true</addResources> <outputDirectory>${project.build.directory}</outputDirectory> </configuration> <executions> <execution> <goals> <goal>repackage</goal> </goals> <configuration> <!--配置jar包特殊标识 配置后,保留原文件,生成新文件 *-run.jar --> <!--配置jar包特殊标识 不配置,原文件命名为 *.jar.original,生成新文件 *.jar --> <!--<classifier>run</classifier>--> </configuration> </execution> </executions> </plugin> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>${maven.plugin.version}</version> <configuration> <source>${java.version}</source> <target>${java.version}</target> <encoding>UTF-8</encoding> <compilerArgs> <arg>-parameters</arg> </compilerArgs> </configuration> </plugin> <!--maven打包时,跳过测试--> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <configuration> <skip>true</skip> </configuration> </plugin> </plugins> </build>
2. 打完包后,正常启动,但只要是用到mybatis-plus 的lambda表达式的地方,都报错,报错如下:
java.lang.IllegalStateException: Failed to execute CommandLineRunner
at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:784) at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:765) at org.springframework.boot.SpringApplication.run(SpringApplication.java:319) at org.springframework.boot.builder.SpringApplicationBuilder.run(SpringApplicationBuilder.java:140) at org.springblade.core.launch.BladeApplication.run(BladeApplication.java:49) at org.springblade.Application.main(Application.java:34) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48) at org.springframework.boot.loader.Launcher.launch(Launcher.java:87) at org.springframework.boot.loader.Launcher.launch(Launcher.java:51) at org.springframework.boot.loader.PropertiesLauncher.main(PropertiesLauncher.java:578) Caused by: com.baomidou.mybatisplus.core.exceptions.MybatisPlusException: This is impossible to happen at com.baomidou.mybatisplus.core.toolkit.ExceptionUtils.mpe(ExceptionUtils.java:39) at com.baomidou.mybatisplus.core.toolkit.support.SerializedLambda.resolve(SerializedLambda.java:67) at com.baomidou.mybatisplus.core.toolkit.LambdaUtils.lambda$resolve$0(LambdaUtils.java:64) at java.util.Optional.orElseGet(Unknown Source) at com.baomidou.mybatisplus.core.toolkit.LambdaUtils.resolve(LambdaUtils.java:63) at com.baomidou.mybatisplus.core.conditions.AbstractLambdaWrapper.columnToString(AbstractLambdaWrapper.java:63) at com.baomidou.mybatisplus.core.conditions.AbstractLambdaWrapper.columnToString(AbstractLambdaWrapper.java:59) at com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper.set(LambdaUpdateWrapper.java:92) at com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper.set(LambdaUpdateChainWrapper.java:45) at com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper.set(LambdaUpdateChainWrapper.java:31) at com.baomidou.mybatisplus.core.conditions.update.Update.set(Update.java:30) at org.springblade.modules.socket.runner.ServerRunner.run(ServerRunner.java:37) at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:781) ... 13 common frames omitted Caused by: java.lang.ClassNotFoundException: org.springblade.modules.socket.runner.ServerRunner at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Unknown Source) at java.io.ObjectInputStream.resolveClass(Unknown Source) at com.baomidou.mybatisplus.core.toolkit.support.SerializedLambda$1.resolveClass(SerializedLambda.java:61) at java.io.ObjectInputStream.readNonProxyDesc(Unknown Source) at java.io.ObjectInputStream.readClassDesc(Unknown Source) at java.io.ObjectInputStream.readClass(Unknown Source) at java.io.ObjectInputStream.readObject0(Unknown Source) at java.io.ObjectInputStream.defaultReadFields(Unknown Source) at java.io.ObjectInputStream.readSerialData(Unknown Source) at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source) at java.io.ObjectInputStream.readObject0(Unknown Source) at java.io.ObjectInputStream.readObject(Unknown Source) at java.io.ObjectInputStream.readObject(Unknown Source) at com.baomidou.mybatisplus.core.toolkit.support.SerializedLambda.resolve(SerializedLambda.java:65) ... 24 common frames omitted
二、你期待的结果是什么?实际看到的又是什么?
分离jar包,减小主包的大小,
三、你正在使用的是什么产品,什么版本?在什么操作系统上?
bladex boot项目,2.4.0.RELEASE,win环境
四、请提供详细的错误堆栈信息,这很重要。
五、若有更多详细信息,请在下面提供。
-
Caused by: java.lang.ClassNotFoundException: org.springblade.modules.socket.runner.ServerRunner
主要报错原因是找不到你的类,这个还是与配置有关,你不要把mybatis-plus的包分离出去
作者追问:2021-03-25 16:00
怎么排除mybatis的包?具体怎么配置?
讨论(0)
官方新品
- 热议问题
-
物联网历史数据接口时间数组传参数问题
1
-
自定义弹出框,多次弹出时弹出框内残留上一次的下拉框数据
1
-
Token增加器的使用为空问题
1
-
Invalid bound statement
1
-
生产环境启动成功后服务自动停止
1
-
只要系统抛了异常,系统就会出现跨域的提示
1
-
skywalking的log页块下没有日志数据
1
-
rider中 使用127.0.0.1访问正常,用域名访问就跨域,一般是哪里设置不对
1
-
在rider 中 后台同一个业务模块,1台服务器跨域,1台服务器不跨域,帮我看看什么问题
1
-
spingblade v3.7.1 blade-user 启动报错 No fallback instance of type class
1
扫一扫访问 Blade技术社区 移动端