赛尔校园公共服务平台 Logo
平台使用
阿里云
百度云
移动云
智算服务
教育生态
登录 →
赛尔校园公共服务平台 Logo
平台使用 阿里云 百度云 移动云 智算服务 教育生态
登录
  1. 首页
  2. 阿里云
  3. 云服务器 ECS
  4. 操作指南
  5. 迁移服务
  6. 将x86应用迁移到倚天云服务器
  7. 软件迁移
  8. 源码迁移
  9. Java语言迁移

Java语言迁移

  • 源码迁移
  • 发布于 2025-04-01
  • 0 次阅读
文档编辑
文档编辑

本文介绍如何将x86平台的Java语言迁移到倚天云服务器。

背景信息

由于Java应用会存在依赖的Java包,并且经常通过JNI调用C编译的本地库,如果直接迁移,可能会带来兼容性问题。迁移时可通过以下方法解决兼容性问题:

  • 升级必要的依赖包:如果当前应用依赖的Java包不兼容ARM平台,则需要进行升级。

  • 重新构建Java工程:应用本身开发的本地库,需要重新编译Java工程来解决。

选择JDK

ARM属于服务器端的新型架构,合适的JDK可以大大减少遇到问题的概率,提高性能。在倚天云服务器上,建议您使用以下两种OpenJDK:

  • Alibaba Dragonwell:阿里巴巴自研OpenJDK的开源版本,在数据中心大规模Java应用部署情况下,可以大幅度提高稳定性、效率以及性能。更多信息,请参见Alibaba Dragonwell。

  • Eclipse Temurin:基于OpenJDK的开源Java SE产生的构建版本,适用于多个平台及Java SE版本。更多信息,请参见Eclipse Temurin。

升级必要的依赖包

部分Java依赖包存在不兼容ARM的问题,如果您运行应用时出现类似于以下的错误,说明使用了x86架构的本地库而导致在ARM平台出现兼容性问题。您可以通过升级依赖包解决。

Exception in thread "main" java.lang.UnsatisfiedLinkError: xxx.so: xxx.so: 
cannot open shared object file: No such file or directory (Possible cause: can't load AMD 64-bit .so on a AARCH64-bit platform)
  • 扫描检测不兼容依赖包

    扫描检测不兼容依赖包的一个相对简单的办法是扫描so文件,如果扫描结果中显示只存在x86架构的so文件,那么该so文件大概率不支持ARM。

    以下为扫描依赖包so文件的参考脚本,您可以将扫描脚本放入编译好的应用目录中,执行脚本进行扫描。

    警告

    禁止在生产环境使用此脚本以免引起业务异常。

    #!/bin/bash
    rm -rf tmp
    mkdir tmp
    for jar in `find . -name *.jar`
    do
    if [ -f $jar ]
    then
    echo $jar
    cp -r $jar tmp/
    fi
    done
    cd tmp
    for test in `ls`
    do
    name=`echo $test | sed "s/.jar//g"`
    echo $name
    mkdir $name
    cp -r $test $name
    cd $name
    unzip -o $test
    cd ..
    done
    echo "========= starting Analysis =========="
    find . -name "*.so" -exec file {} \;

    扫描完成后会输出类似于如下的信息,lz4-1.3.0中存在三个x86架构的so文件,不支持ARM架构,您可以升级到1.4.0修复此问题。

    lz4软件从1.4.0版本起已更名为lz4-java。

    ========= starting Analysis ==========
    ./lz4-1.3.0/win32/amd64/liblz4-java.so: PE32+ executable (DLL) (console) x86-64, for MS Windows
    ./lz4-1.3.0/linux/amd64/liblz4-java.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=2eafd0d4e86904e188b47565639318325108fffa, not stripped
    ./lz4-1.3.0/linux/i386/liblz4-java.so: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, BuildID[sha1]=41041674439aea5d1fd6c62b6d88f63da7600c9f, not stripped
  • 常见兼容包

    下表列出了部分常见可能存在兼容性问题的依赖包,建议您升级到推荐版本。

    依赖包名称

    推荐版本

    lz4-java

    1.4.0

    jna

    5.2.2

    snappy-java

    1.1.3

    icu4j

    68.1

    sqlite-jdbc

    3.20.0

    forest-sqlite-jdbc

    3.32.3.3

    netty-tcnative

    2.0.31

    netty-transport-native-epoll

    4.1.50

重新构建Java工程

Java工程常用的构建工具如Maven等均与架构无关,因此构建工具无需更改。仅需设置好JDK及GCC即可重新构建。关于如何选择JDK及GCC,请参见选择JDK和C/C++语言迁移。

相关文章

CC++语言迁移 2025-04-01 12:00

C/C++属于静态编译语言,C/C++编译是将源代码经由编译器、汇编器处理生成机器指令,再通过链接器和库函数结合生成可执行程序。但x86平台和ARM平台属于不同的架构,指令集也不同,其开发的程序从x86平台迁移到ARM平台时,必须重新编译。本文介绍从x86平台迁移到倚天云服务器时,如何对C/C++中

Java语言迁移 2025-04-01 12:00

本文介绍如何将x86平台的Java语言迁移到倚天云服务器。 背景信息 由于Java应用会存在依赖的Java包,并且经常通过JNI调用C编译的本地库,如果直接迁移,可能会带来兼容性问题。迁移时可通过以下方法解决兼容性问题: 升级必要的依赖包</

MakeCMake构建文件 2025-04-01 12:00

Make/CMake工具用于构建CMakeLists.txt、Makefile文件。CMakeLists.txt、Makefile文件中涉及的迁移内容主要是用于指定数据类型、处理器架构、代码生成等编译选项。本文介绍从x86平台迁移到倚天云服务器时,如何对这些文件进行相应修改。 C/C++添加-mab

Python语言迁移 2025-04-01 12:00

本文介绍x86平台的Python如何迁移到倚天云服务器。 Python是一种解释型脚本语言,Python代码与平台无关,各大操作系统都已经支持了ARM平台的Python。在ARM平台可以直接使用Python,应用代码无需编译,可直接运行。 以Alibaba Cloud Linux 3为例,可以使用y

目录
Copyright © 2025 your company All Rights Reserved. Powered by 赛尔网络.
京ICP备14022346号-15
gongan beian 京公网安备11010802041014号