问题
使用maven指定编译版本为jdk11编译,本地默认环境变量是jdk8。
通过参数Dmaven.compiler.source=11 -Dmaven.compiler.target=11 或者
Djava.home=/Library/Java/JavaVirtualMachines/jdk-11.jdk/Contents/Home
./mvnw -Dcheckstyle.skip=true -Drat.skip=true -Dmaven.javadoc.skip=true -Dmaven.compiler.source=11 -Dmaven.compiler.target=11 -Djava.home=/Library/Java/JavaVirtualMachines/jdk-11.jdk/Contents/Home -Djacoco.skip=true -DskipITs -DskipTests clean install -T1C
Exception in thread "main" java.lang.InternalError: java.io.FileNotFoundException: /Library/Java/JavaVirtualMachines/jdk-11.jdk/Contents/Home/lib/currency.data (No such file or directory)
at java.util.Currency$1.run(Currency.java:247)
at java.util.Currency$1.run(Currency.java:214)
at java.security.AccessController.doPrivileged(Native Method)
at java.util.Currency.<clinit>(Currency.java:214)
at java.text.DecimalFormatSymbols.initialize(DecimalFormatSymbols.java:638)
at java.text.DecimalFormatSymbols.<init>(DecimalFormatSymbols.java:113)
at sun.util.locale.provider.DecimalFormatSymbolsProviderImpl.getInstance(DecimalFormatSymbolsProviderImpl.java:85)
at java.text.DecimalFormatSymbols.getInstance(DecimalFormatSymbols.java:180)
at java.util.Formatter.getZero(Formatter.java:2283)
at java.util.Formatter.<init>(Formatter.java:1892)
at java.util.Formatter.<init>(Formatter.java:1914)
at java.lang.String.format(String.java:2940)
at org.apache.maven.wrapper.PathAssembler.rootDirName(PathAssembler.java:68)
at org.apache.maven.wrapper.PathAssembler.getDistribution(PathAssembler.java:57)
at org.apache.maven.wrapper.Installer.createDist(Installer.java:76)
at org.apache.maven.wrapper.WrapperExecutor.execute(WrapperExecutor.java:155)
at org.apache.maven.wrapper.MavenWrapperMain.main(MavenWrapperMain.java:72)
Caused by: java.io.FileNotFoundException: /Library/Java/JavaVirtualMachines/jdk-11.jdk/Contents/Home/lib/currency.data (No such file or directory)
at java.io.FileInputStream.open0(Native Method)
at java.io.FileInputStream.open(FileInputStream.java:195)
at java.io.FileInputStream.<init>(FileInputStream.java:138)
at java.io.FileInputStream.<init>(FileInputStream.java:93)
at java.util.Currency$1.run(Currency.java:221)
... 16 more
解决思路
查阅相关资料,说可能是
可能出现问题jdk损坏
这个错误通常表示在执行 Maven 命令时,Java 运行时无法在 /Library/Java/JavaVirtualMachines/jdk-11.jdk/Contents/Home/lib/ 目录下找到 currency.data 文件。这个问题可能是由于 JDK 11 文件损坏或缺失导致的。
根据您提供的命令,-Djava.home 属性的值已经设置为 JDK 的根目录。因此,建议检查一下 /Library/Java/JavaVirtualMachines/jdk-11.jdk/Contents/Home/lib/ 目录是否存在 currency.data 文件。如果该目录中确实不存在 currency.data 文件,可以尝试手动下载该文件,并将其复制到该目录中。您可以从 OpenJDK 官网下载 currency.data 文件,找到与您的 JDK 11 版本对应的文件,然后将其复制到 /Library/Java/JavaVirtualMachines/jdk-11.jdk/Contents/Home/lib/ 目录中。
如果您已经确定 /Library/Java/JavaVirtualMachines/jdk-11.jdk/Contents/Home/lib/ 目录中存在 currency.data 文件,但仍然出现了上述错误,请尝试重新安装 JDK 11,并确保所有文件都被正确安装。可以从 Oracle 官网或者 OpenJDK 官网下载适合您操作系统的 JDK 11 安装包,并按照安装向导的提示进行安装。安装完成后,再次运行 Maven 命令,看是否仍然出现同样的错误。
排除jdk损坏的原因
环境变量加入jdk11和jdk8的环境变量
cat .bash_profile
# 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"
可以正常运行
改变本地jdk默认环境变量是jdk11
本地使用jdk11的环境是可以
于是使用jdk tool的方式,先设置环境变量是jdk11
先设置jenkins
可参考:
https://www.jianshu.com/p/30c9034d83d3
stages {
stage('install') {
tools {
jdk 'jdk-11'
}
steps {
script {
sh './mvnw -Dcheckstyle.skip=true -Drat.skip=true -Dmaven.javadoc.skip=true -Djacoco.skip=true -DskipITs -DskipTests clean install -T1C'
}
}
}
}
然后就可以愉快的打镜像了