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

Posted

技术标签:

【中文标题】如何控制 IntelliJ Scratch 文件的依赖关系?【英文标题】:How can I control the dependencies of IntelliJ Scratch files? 【发布时间】:2018-12-13 06:48:49 【问题描述】:

我有一个使用 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)

并不是说我实际上可以肯定地知道这一点,因为我也无法弄清楚我应该如何查看暂存文件正在拉入的版本。我已经从项目的 deps 和暂存文件中删除了番石榴仍然有效...为什么?图书馆从哪里来???临时运行配置完全没有任何可以说明这一点的内容:

但它仍然运行良好。我发现如果我从本地常春藤缓存中删除番石榴条目,它将不再运行。如果我然后将番石榴添加回我的项目的部门,它最终会再次出现在我的常春藤缓存中,然后即使我从项目部门中删除番石榴,临时文件也会再次正常。那么暂存文件只是选择一个随机版本还是什么?位于~/.ivy2/cache/com.google.guava 的常春藤缓存如下所示:

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

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

【问题讨论】:

您的项目类型是什么?您是否在新的简单项目中面临同样的问题? 这是一个SBT项目,依赖来自maven。在一个简单的新项目中,即使 IntelliJ 在项目之间共享暂存文件,我也无权访问 guava,因此暂存文件无法运行。在这个新项目中,我的暂存器工作正常(编辑器和运行时使用相同的库版本,所以我的东西现在可以工作了!),删除 dep 会使暂存器立即无法运行,而不会在缓存中乱扔垃圾。所以看来我的问题是临时文件系统是这个项目的本地文件。诡异的。不过谢谢你的提示,至少我现在可以运行这个东西了! 【参考方案1】:

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

【讨论】:

如果这对某人有帮助,您可以轻松地将父项目的类路径用于 Kotlin 临时文件 - kotlinlang.org/docs/tutorials/quick-run.html(请参阅“使用模块的类路径”配置) 使用 Java,当我这样做时得到Error: Could not find or load main class Scratch 这并不能解决问题,但是对于那些正在寻找解决类路径方法配置的人来说,我所做的是,我仍然将我的 scratch.java 保存在它的文件夹中,当它准备好时,我将它复制并粘贴到我用来配置类路径的文件夹的根目录中。在那里它似乎可以工作并在类路径中找到该类。我知道这不是很实用,但我只是想发表评论,因为它可以取消阻止某人。【参考方案2】:

我在 PyCharm 中遇到了一个类似的问题,我刚刚修复了 - 所以您的情况可能会有所不同。它表明有一个 Python 虚拟环境作为默认附加到项目窗口(我在同一个窗口中打开了多个项目 - 但显然第一个成为默认)。

我深入研究了解释器列表,找到了我想要的并编辑了它的属性,特别是将此虚拟环境与当前项目相关联

我选中了包含我正在寻找的库的 virtualenv 框,这修复了编辑器本身的编译错误。

【讨论】:

以上是关于如何控制 IntelliJ Scratch 文件的依赖关系?的主要内容,如果未能解决你的问题,请参考以下文章

如何配置 IntelliJ HQL 控制台以使用 Spring Boot

如何在scratch 用猫2 做游戏

Scratch2中如何打开scratch3

scratch如何在角色里导入代码

如何阻止 IntelliJ IDEA 从 .properties 文件中删除空行?

如何在IntelliJ控制台中锁定滚动?