鲲鹏社区首页
中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助

编译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包。

结论、解决方案及效果

  1. 下载并适配支持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

    ARM64架构的mongo和process两个JAR包也可参考《de.flapdoodle.embed.mongo-2.2.0.jar移植指南》和《de.flapdoodle.embed.process-2.1.2.jar移植指南》自行编译进行替换。

  2. 若缺少相关库目录,则需要先创建库目录。
    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
  3. 将下载的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
  4. 本文以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 ../../
  5. 创建“/root/.embedmongo/extracted/Linux-B64--4.0.12”目录。
    mkdir -p /root/.embedmongo/extracted/Linux-B64--4.0.12
  6. 参考《MongoDB 4.0.12 移植指南》中的MongoDB编译,编译MongoDB。
  7. 将本地仓目录下的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,则de.flapdoodle.embed.mongo-2.2.0.jar需要参见《de.flapdoodle.embed.mongo-2.2.0.jar 移植指南》自行编译并替换,否则可能会由于版本不同而导致报错。

  8. 由于MongoDB 4.0版本以上在设置“replsetName”后,“NoJournal”必须设置为“false”,还需要修改EmbeddedMongoAutoConfiguration.java文件。
    1. 修改EmbeddedMongoAutoConfiguration.java源码。
      vim ./spring-boot-project/spring-boot-autoconfigure//src/main/java/org/springframework/boot/autoconfigure/mongo/embedded/EmbeddedMongoAutoConfiguration.java
    2. “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作为代码缩进。

    3. “Esc”键,输入:wq!,按“Enter”保存并退出编辑。