如何修复“IllegalArgumentException:比较方法违反了它的一般契约!”,当索引一个Gems Repository时
主题
在索引Gems存储库时,如果有很多版本,版本比较器可能会失败
影响版本
人工4.0.0+,5.0.0+
细节
问题的堆栈跟踪:[art-exec-273] ERROR . o.a.a.g.i.GemsLocalIndexHandler:223 -无法重新计算存储库gems-local的索引
java.lang.IllegalArgumentException:比较方法违反了它的通用契约!
java.util.ComparableTimSort.mergeHi (ComparableTimSort.java: 866)
java.util.ComparableTimSort.mergeAt (ComparableTimSort.java: 483)
java.util.ComparableTimSort.mergeCollapse (ComparableTimSort.java: 406)
java.util.ComparableTimSort.sort (ComparableTimSort.java: 213)
java.util.Arrays.sort (Arrays.java: 1312)
java.util.Arrays.sort (Arrays.java: 1506)
java.util.ArrayList.sort (ArrayList.java: 1462)
java.util.Collections.sort (Collections.java: 141)
org.artifactory.addon.gems.helpers.FinderHelper.buildNameVersionPlatformTuples (FinderHelper.java: 184)
org.artifactory.addon.gems.helpers.RecalculateIndexHelper.getIndexEntries (RecalculateIndexHelper.java: 52)
在org.artifactory.addon.gems.helpers.RecalculateIndexHelper.recalculateIndex (RecalculateIndexHelper.java: 36)
org.artifactory.addon.gems.index.GemsLocalIndexHandler.doRecalculateIndex (GemsLocalIndexHandler.java: 213)
org.artifactory.addon.gems.index.GemsLocalIndexHandler.recalculateIndex (GemsLocalIndexHandler.java: 169)
org.artifactory.addon.gems.GemsAddonImpl.reindexAsync (GemsAddonImpl.java: 61)
…
决议
添加java.util.Arrays。useLegacyMergeSort=true作为默认文件的java选项。
对于zip安装,这将是$ARTIFACTORY_HOME/bin/artifactory.default:
出口JAVA_OPTIONS = " -Djava.util.Arrays.useLegacyMergeSort = true "
对于Service安装,修改$ARTIFACTORY_HOME/etc/default中的JAVA_OPTIONS。
对于RPM或Debian安装,修改/etc/opt/jfrog/artifactory/default中的JAVA_OPTIONS。
如果在Artifactory 7中看到此错误,则可以通过将其放入系统中来应用此解决方案。yaml,在
共享:extraJavaOpts: -Djava.util.Arrays.useLegacyMergeSort = true
然后重启。
