编译Spring Boot时提示IllegalArgumentException的解决方法
问题现象描述
用例执行过程中,提示“IllegalArgumentException :this version does not support 32Bit”。
关键过程、根本原因分析
编译过程中依赖的第三方包de.flapdoodle.embed.process-2.1.2.jar和de.flapdoodle.embed.mongo-2.2.0.jar并不支持ARM架构。需要下载并适配支持ARM64架构的mongo和process两个jar包。
结论、解决方案及效果
- 下载并适配支持ARM64架构的mongo和process两个JAR包。
wget https://mirrors.huaweicloud.com/kunpeng/maven/de/flapdoodle/embed/de.flapdoodle.embed.mongo/2.2.0/de.flapdoodle.embed.mongo-2.2.0.jar wget https://mirrors.huaweicloud.com/kunpeng/maven/de/flapdoodle/embed/de.flapdoodle.embed.process/2.1.2/de.flapdoodle.embed.process-2.1.2.jar
- 若缺少相关库目录,则需要先创建库目录。
mkdir -p /root/.m2/repository/de/flapdoodle/embed/de.flapdoodle.embed.mongo/2.2.0 mkdir -p /root/.m2/repository/de/flapdoodle/embed/de.flapdoodle.embed.process/2.1.2
- 将下载的jar包移至相应目录下。
\cp de.flapdoodle.embed.mongo-2.2.0.jar /root/.m2/repository/de/flapdoodle/embed/de.flapdoodle.embed.mongo/2.2.0 \cp de.flapdoodle.embed.process-2.1.2.jar /root/.m2/repository/de/flapdoodle/embed/de.flapdoodle.embed.process/2.1.2
- 本文以MongoDB 4.0.12版本为例,将测试用例中用到的其他版本替换掉。
cd spring-boot-project/spring-boot-autoconfigure sed -i "s/3\.5\.5/4\.0\.12/g" `grep -rl "3\.5\.5"` sed -i "s/3\.4\.1/4\.0\.12/g" `grep -rl "3\.4\.1"` sed -i "s/3_4_15/4_0_12/g" `grep -rl "3_4_15"` cd ../../
- 创建“/root/.embedmongo/extracted/Linux-B64--4.0.12”目录。
mkdir -p /root/.embedmongo/extracted/Linux-B64--4.0.12
- 参考《MongoDB 4.0.12 移植指南》中的MongoDB编译,编译MongoDB。
- 将本地仓目录下的MongoDB用编译成功后的MongoDB替换掉。
\cp /usr/local/mongo/bin/mongod /root/.embedmongo/extracted/Linux-B64--4.0.12 && mv /root/.embedmongo/extracted/Linux-B64--4.0.12/mongod /root/.embedmongo/extracted/Linux-B64--4.0.12/extractmongod
- 由于MongoDB 4.0版本以上在设置“replsetName”后,“NoJournal”必须设置为“false”,还需要修改EmbeddedMongoAutoConfiguration.java文件。
- 修改EmbeddedMongoAutoConfiguration.java源码。
vim ./spring-boot-project/spring-boot-autoconfigure//src/main/java/org/springframework/boot/autoconfigure/mongo/embedded/EmbeddedMongoAutoConfiguration.java
- 按“i”进入编辑模式,增加如下代码内容。
- 在第32行的下一行新增如下内容。
import de.flapdoodle.embed.mongo.config.MongoCmdOptionsBuilder;
- 在第133行的下一行新增如下代码。
if (replSetName != null) { MongoCmdOptionsBuilder optionsBuilder = new MongoCmdOptionsBuilder(); optionsBuilder.useNoJournal(false); builder.cmdOptions(optionsBuilder.build()); }
请使用:set list检查格式。不能出现空格,请使用Tab作为代码缩进。
- 在第32行的下一行新增如下内容。
- 按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。
- 修改EmbeddedMongoAutoConfiguration.java源码。
父主题: 故障排除