Skip to content
本页导航

Java 8 to Java 17

本文主要介绍如何将本地环境升级至Java 17来使用最新的Spring Cloud Investoday Starter 3.4.X及以上版本,同时本地环境兼容历史项目。

升级本地基础环境为 Java17

由于Maven编译时使用的是本地的Java环境,需要将本地电脑的基础环境升级为Java17。

推荐Java17的版本见开发指南

image-20250318下午44406994

升级 Spring Cloud Investoday Starter

版本号 >= 3.4.1

升级通用SDK包

aix-tool >= 4.0.0

open-aix-tool >= 4.0.0

aix-mybatis >= 3.0.0

通用包的还是以Java8编译,以便兼容历史项目。

替换JavaX的包名

原包名升级包名
javax.servlet.*jakarta.servlet.*
javax.batchjakarta.batch
javax.jsonjakarta.json
javax.persistencejakarta.persistence
javax.jmsjakarta.jms
javax.xml.wsjakarta.xml.ws
javax.ws.rsjakarta.ws.rs
  • 一键替换包名代码 Python

    python
    import os
    import re
    
    # 需要替换的包映射:javax -> jakarta
    # key是正则表达式(注意转义), value是替换时所用的字符串。
    #   ^\s*                 :行首,可有若干空白符
    #   import\s+            :关键字 import 与一至多个空白
    #   javax\.servlet\.     :javax.servlet. 这里用 \. 转义点号
    #   (.*)                 :把后面的内容也捕获下来,可以视情况使用
    #   MULTILINE 模式       :让 ^ 和 $ 可以匹配每一行的开头和结尾
    REPLACEMENTS = {
        # 匹配 import javax.servlet.xxx
        r'(^\s*import\s+)javax\.servlet\.': r'\1jakarta.servlet.',
        # 匹配 import javax.batch
        r'(^\s*import\s+)javax\.batch\b': r'\1jakarta.batch',
        # 匹配 import javax.json
        r'(^\s*import\s+)javax\.json\b': r'\1jakarta.json',
        # 匹配 import javax.persistence
        r'(^\s*import\s+)javax\.persistence\b': r'\1jakarta.persistence',
        # 匹配 import javax.jms
        r'(^\s*import\s+)javax\.jms\b': r'\1jakarta.jms',
        # 匹配 import javax.xml.ws
        r'(^\s*import\s+)javax\.xml\.ws\b': r'\1jakarta.xml.ws',
        # 匹配 import javax.ws.rs
        r'(^\s*import\s+)javax\.ws\.rs\b': r'\1jakarta.ws.rs',
    }
    
    def upgrade_java_imports(code_path):
        """
        从 code_path 开始,递归遍历所有 .java 文件,
        使用正则替换 javax 包为 jakarta 包。
        返回发生替换的文件数量。
        """
        replaced_files_count = 0
    
        for root, dirs, files in os.walk(code_path):
            for filename in files:
                if filename.endswith(".java"):
                    file_path = os.path.join(root, filename)
    
                    with open(file_path, "r", encoding="utf-8") as f:
                        old_content = f.read()
    
                    new_content = old_content
                    # 使用正则执行替换
                    for pattern, replacement in REPLACEMENTS.items():
                        regex = re.compile(pattern, re.MULTILINE)
                        new_content = regex.sub(replacement, new_content)
    
                    # 如果内容发生变化,则写回文件并计数
                    if new_content != old_content:
                        with open(file_path, "w", encoding="utf-8") as f:
                            f.write(new_content)
                        replaced_files_count += 1
    
        return replaced_files_count
    
    
    if __name__ == "__main__":
        # 请将此路径改为你的Java工程根目录
        code_dir = "java工程目录"
    
        count = upgrade_java_imports(code_dir)
        print(f"替换完成,共替换了 {count} 个 .java 文件。")
    import os
    import re
    
    # 需要替换的包映射:javax -> jakarta
    # key是正则表达式(注意转义), value是替换时所用的字符串。
    #   ^\s*                 :行首,可有若干空白符
    #   import\s+            :关键字 import 与一至多个空白
    #   javax\.servlet\.     :javax.servlet. 这里用 \. 转义点号
    #   (.*)                 :把后面的内容也捕获下来,可以视情况使用
    #   MULTILINE 模式       :让 ^ 和 $ 可以匹配每一行的开头和结尾
    REPLACEMENTS = {
        # 匹配 import javax.servlet.xxx
        r'(^\s*import\s+)javax\.servlet\.': r'\1jakarta.servlet.',
        # 匹配 import javax.batch
        r'(^\s*import\s+)javax\.batch\b': r'\1jakarta.batch',
        # 匹配 import javax.json
        r'(^\s*import\s+)javax\.json\b': r'\1jakarta.json',
        # 匹配 import javax.persistence
        r'(^\s*import\s+)javax\.persistence\b': r'\1jakarta.persistence',
        # 匹配 import javax.jms
        r'(^\s*import\s+)javax\.jms\b': r'\1jakarta.jms',
        # 匹配 import javax.xml.ws
        r'(^\s*import\s+)javax\.xml\.ws\b': r'\1jakarta.xml.ws',
        # 匹配 import javax.ws.rs
        r'(^\s*import\s+)javax\.ws\.rs\b': r'\1jakarta.ws.rs',
    }
    
    def upgrade_java_imports(code_path):
        """
        从 code_path 开始,递归遍历所有 .java 文件,
        使用正则替换 javax 包为 jakarta 包。
        返回发生替换的文件数量。
        """
        replaced_files_count = 0
    
        for root, dirs, files in os.walk(code_path):
            for filename in files:
                if filename.endswith(".java"):
                    file_path = os.path.join(root, filename)
    
                    with open(file_path, "r", encoding="utf-8") as f:
                        old_content = f.read()
    
                    new_content = old_content
                    # 使用正则执行替换
                    for pattern, replacement in REPLACEMENTS.items():
                        regex = re.compile(pattern, re.MULTILINE)
                        new_content = regex.sub(replacement, new_content)
    
                    # 如果内容发生变化,则写回文件并计数
                    if new_content != old_content:
                        with open(file_path, "w", encoding="utf-8") as f:
                            f.write(new_content)
                        replaced_files_count += 1
    
        return replaced_files_count
    
    
    if __name__ == "__main__":
        # 请将此路径改为你的Java工程根目录
        code_dir = "java工程目录"
    
        count = upgrade_java_imports(code_dir)
        print(f"替换完成,共替换了 {count} 个 .java 文件。")

至此,Java17升级完成

lhiro