通过火焰图发现logback-classic的1.2.0的版本LogbackMDCAdapter 的put方法使用synchronized解决多线程安全问题,发现其性能特别差。发现最新版本1.4.8版本使用的读写分离方式处理。
于是决定将logback 从1.2.0升级到最新的1.4.8,完了之后编译的时报错“类文件具有错误的版本 55.0, 应为 52.0,请删除该文件或确保该文件位于正确的类路径子目录中。”
[ERROR] /Users/evanyang/IdeaProjects/xiaoman/shardingsphere/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-core/src/main/java/org/apache/shardingsphere/proxy/frontend/command/CommandExecutorTask.java:[19,30] 无法访问ch.qos.logback.classic.Logger
[ERROR] 错误的类文件: /Users/evanyang/.m2/repository/ch/qos/logback/logback-classic/1.4.8/logback-classic-1.4.8.jar(ch/qos/logback/classic/Logger.class)
[ERROR] 类文件具有错误的版本 55.0, 应为 52.0
[ERROR] 请删除该文件或确保该文件位于正确的类路径子目录中。
[ERROR]
[ERROR] -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException
[ERROR]
[ERROR] After correcting the problems, you can resume the build with the command
[ERROR] mvn <args> -rf :shardingsphere-proxy-frontend-core
上面报错中的55.0是JDK11使用的类文件格式(class file format)的版本号
提示的意思是当面项目使用的类文件格式版本比某个依赖包使用的类文件格式版本低
实际就是指当前项目使用的JDK版本比某个依赖包使用的JDK版本低
File -> Project Structure -> Project -> Project SDK
这里对于的jdk换成11
./mvnw -Dcheckstyle.skip=true -Drat.skip=true -Dmaven.javadoc.skip=true -Djacoco.skip=true -DskipITs -DskipTests clean install -T1C
因为我本地默认安装的是1.8版本,只用修改成对应的1.11版本即可
最简单的方法可以通过idea,这里会自动弹出你本地安装过的jdk的文件目录
默认jdk的目录
/Library/Java/JavaVirtualMachines/jdk-11.jdk/Contents/Home
File -> Project Structure -> Project ->SDKs
# JDK8
export JAVA_8_HOME='/Library/Java/JavaVirtualMachines/jdk1.8.0_291.jdk/Contents/Home'
# JDK11
export JAVA_11_HOME='/Library/Java/JavaVirtualMachines/jdk-11.jdk/Contents/Home'
export JAVA_HOME=$JAVA_11_HOME
# export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_291.jdk/Contents/Home^M
alias jdk8="export JAVA_HOME=$JAVA_8_HOME"
alias jdk11="export JAVA_HOME=$JAVA_11_HOME"
# JDK8
export JAVA_8_HOME='/Library/Java/JavaVirtualMachines/jdk1.8.0_291.jdk/Contents/Home'
# JDK11
export JAVA_11_HOME='/Library/Java/JavaVirtualMachines/jdk-11.jdk/Contents/Home'
export JAVA_HOME=$JAVA_11_HOME
alias jdk8="export JAVA_HOME=$JAVA_8_HOME"
alias jdk11="export JAVA_HOME=$JAVA_11_HOME"
使用java -version查看当前的jdk版本
输入jdk8 或者jdk11 切换相应的环境
source .bash_profile
就是降低包冲突的版本了
这里是为了升级包才出现的冲突,降低包版本明显是不可行的
Major Minor JDK
45 3 1(.0.2)
45 3 1.1
46 0 1.2
47 0 1.3
48 0 1.4
49 0 5
50 0 6
51 0 7
52 0 8
53 0 9
54 0 10
55 0 11
56 0 12