我有一个使用guava集合的草稿文件,我遇到了一些奇怪的错误,我不得不认为这是由于编辑器和实际运行环境假定不同版本的guava集合造成的:
Exception in thread "main" java.lang.IllegalAccessError: tried to access method com.google.common.collect.Range.<init>(Lcom/google/common/collect/Cut;Lcom/google/common/collect/Cut;)V from class
com.google.common.collect.Ranges
at com.google.common.collect.Ranges.create(Ranges.java:80)
at com.google.common.collect.Ranges.closedOpen(Ranges.java:114)
at Scratch.main(scratch_2.java:69)
我并不能确定,因为我也不知道如何查看scratch文件正在使用的版本。我已完全从项目依赖项中删除了guava,但scratch文件仍然可以正常运行……为什么?这个库从哪里来的?
然而它仍然可以正常运行。我发现,如果我从本地ivy缓存中删除guava条目,它就无法运行。如果我再将guava添加回项目依赖项,则它会再次出现在我的ivy缓存中,即使我从项目依赖项中删除guava,scratch文件仍然可以正常工作。那么scratch文件只是随机选择一个版本还是怎么做的呢?ivy缓存位于~/.ivy2/cache/com.google.guava
,看起来像这样:
但是还有一个名为“jars”的文件夹,其中某些原因包含guava-12.0:
我不知道正在使用哪个版本,或者缓存中为什么有这么多不同的版本。有什么想法吗?