当我尝试访问应用程序中的页面时,出现以下错误。
SEVERE: Servlet.service() for servlet [jsp] threw exception
java.lang.IllegalArgumentException: Invalid version number: Version number may be negative or greater than 255
at com.ibm.icu.util.VersionInfo.getInstance(VersionInfo.java:191)
at com.ibm.icu.impl.ICUDebug.getInstanceLenient(ICUDebug.java:65)
at com.ibm.icu.impl.ICUDebug.<clinit>(ICUDebug.java:69)
我假设这是由于一些版本不匹配。我如何跟踪问题?应用程序没有mavenized,因此我不知道如何检查问题。至少如果我知道哪个jarfile是给问题,那么它将是好的。
8条答案
按热度按时间fwzugrvs1#
TLDR;将您的
icu4j.jar
文件替换为latest version。这可能是由于类路径中的ICU4J版本较旧所致。
VersionInfo
类的版本号限制为2个字符,即限制为255。由于Java 8现在是1.8.0_291,因此291
超出了2个字符的限制,从而导致ICU 4J VersionInfo异常。ICU-21219已在ICU 4J中修复:68.1
llmtgqce2#
问题解决了,因为我降级了我的java版本。
n3h0vuf23#
如果你不想升级ICU,只需在调用ICU之前调用这个小助手函数:
jtjikinw4#
好吧,我知道这是一个肮脏的黑客,但将“java.version”属性设置为不包含大于255的数字的版本对我来说是有效的:
只需在加载类之前设置它(第一次访问),然后恢复原始值。并向库的作者提交一个bug,因为这只是一个变通办法。
mqxuamgl5#
我通过排除旧的icu4j包解决了这个问题,例如:
然后参考最新的icu4j包:
tquggr8v6#
我通过从www.example.com更新到www.example.com解决了该问题8.0.0.09.1.0.0
lb3vh1jj7#
如https://academy.jahia.com/training-kb/knowledge-base/invalid-version-number-version-number-may-be-negative-or-greater-than-255上所示
原因在重新启动之前,您的JDK很可能已升级到255以上的版本,从而导致库icu 4J中出现已知错误(cf internal ticket QA-13064)。
解决方案如果无法升级到OpenJDK 11,请对每个节点执行以下步骤:
1.停止节点
1.将库重命名为TOMCAT_HOME/webapps/ROOT/WEB-INF/lib/icu4j-4.0.1.jar,并添加后缀.巴克
1.在同一文件夹中,添加库icu4j-67.1.jar
1.启动节点
如果您只是升级Java子版本,也可以这样做。例如,从1.8.0_211升级到1.8.0_311
vxf3dgd48#
我可以通过切换到与Jenkins兼容的Java版本来解决这个问题。请注意,以下步骤仅在您的系统上安装了多个Java版本时才有效。以下是采取的步骤:
1.使用以下命令检查其他Java版本:sudo更新替代项--配置java
1.选择兼容的java版本
1.重新启动jenkins
希望它有帮助!请让我知道,如果你需要进一步的澄清。