Appearance
Java 8 to Java 17
本文主要介绍如何将本地环境升级至Java 17来使用最新的Spring Cloud Investoday Starter 3.4.X及以上版本,同时本地环境兼容历史项目。
升级本地基础环境为 Java17
由于Maven编译时使用的是本地的Java环境,需要将本地电脑的基础环境升级为Java17。
推荐Java17的版本见开发指南

升级 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.batch | jakarta.batch |
| javax.json | jakarta.json |
| javax.persistence | jakarta.persistence |
| javax.jms | jakarta.jms |
| javax.xml.ws | jakarta.xml.ws |
| javax.ws.rs | jakarta.ws.rs |
一键替换包名代码 Python
pythonimport 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 文件。")