У меня есть рабочий файл, использующий коллекции гуавы, и я получаю некоторые странные ошибки, которые я должен допустить из-за редактора и фактической среды выполнения, предполагающей разные версии коллекций гуавы:
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)
Не то, чтобы я действительно мог это знать наверняка, потому что я также не могу понять, как я должен видеть, какую версию загружает скретч-файл. Я удалил guava из deps моего проекта ПОЛНОСТЬЮ и скретч-файл все еще работает ... ПОЧЕМУ? Откуда берется библиотека ??? Конфигурация запуска с нуля полностью пуста от всего, что может диктовать это:
И все же он все еще работает просто отлично. Я обнаружил, что если я удалю записи гуавы из моего локального кэша плюща, он больше не будет работать. Если я затем добавлю гуаву обратно в deps моего проекта, она снова попадет в мой кэш плюща, и даже если я удаляю гуаву из deps проекта, файл скретча снова в порядке. Так что же, скретч файл выбирает случайную версию или что-то в этом роде? Кэш плюща, который находится на ~/.ivy2/cache/com.google.guava
, выглядит так:
Но есть также папка "jars", которая по какой-то причине имеет guava-12.0:
И снова, я понятия не имею, какая версия используется или почему в кеше так много разных версий. Есть идеи?