如何控制IntelliJ Scratch文件的依赖性?

时间:2018-07-04 20:09:31

标签: java intellij-idea guava ivy intellij-idea-2018

我有一个使用番石榴集合的暂存文件,并且我不得不假设一些奇怪的错误是由于编辑器和实际运行环境假定番石榴集合的版本不同而引起的:

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)

并不是我真的可以肯定地知道这一点,因为我也无法弄清楚应该如何看待暂存文件的版本。我已从项目的Deps和暂存文件中完全删除了番石榴。仍然有效...为什么?图书馆从哪里来???从头开始运行的配置完全没有什么可决定的:

scratch run config

但是它仍然可以正常运行。我发现,如果我从本地常春藤缓存中删除了番石榴条目,它将不再运行。如果再将番石榴重新添加到项目的部门中,它将再次出现在我的常春藤缓存中,然后即使我从项目部门中删除了番石榴,也可以重新创建临时文件。那么,草稿文件只是选择一个随机版本还是其他?常春藤缓存位于~/.ivy2/cache/com.google.guava,如下所示:

ivy cache

但是由于某种原因,还有一个带有guava-12.0的“ jars”文件夹:

other folder in ivy cache

同样,我也不知道正在使用哪个版本,或者为什么缓存有这么多不同的版本。有什么想法吗?

2 个答案:

答案 0 :(得分:5)

对我来说,最简单的一种方法是在运行配置对话框中选择“使用现有项目模块的类路径”(已配置依赖项)。如果您想从项目中提取一部分功能以单独使用但仍使用已配置的依赖项,则此功能很有用。

答案 1 :(得分:1)

我在PyCharm中遇到了一个我刚刚解决的类似问题-因此您的里程可能会有所不同。它表示在项目窗口中有一个默认的Python虚拟环境作为附件(我在同一个窗口中打开了多个项目,但显然第一个成为默认项目)。

我进入了口译员列表,找到了我想要的人并编辑了它的属性,特别是将此虚拟环境与当前项目相关联

我选中了具有我要查找的库的virtualenv框,这修复了编辑器本身中的编译错误。

enter image description here