Intellij 在运行时不会检测到代码更改
Posted
技术标签:
【中文标题】Intellij 在运行时不会检测到代码更改【英文标题】:Intellij will not detect code changes when running 【发布时间】:2021-05-16 14:13:11 【问题描述】:当我尝试使用 Intellij Run 函数运行我的 discord bot java 项目时,Intellij 不会检测到我的代码更改,在编译的类文件中它显示我的代码更改,但是当我运行它似乎使用旧代码而不是它做我当前代码显示的事情。 (顺便说一句,如果这很重要,我正在使用 maven)
我已经尝试过:重新启动 Intellij,使缓存无效,从磁盘刷新文件,删除我的项目的 .idea 和目标文件夹,创建一个新项目并复制代码,清理包,但似乎没有任何解决方法。
这是它在 if 语句中运行的代码:
if (!splitName[2].equals(String.valueOf(i)))
System.out.println("inproper");
这是它应该运行的代码(我也知道一些代码被注释掉了,我已经尝试运行它但它没有检测到它):
if (!splitName[2].equals(String.valueOf(i)))
System.out.println("test1");
System.out.println("test2");
/*System.out.println("inproper");
VoiceChannel voiceChannel = guild.getVoiceChannelById(currentAutoVoiceChannels.get(type).get(0));
if (voiceChannel == null)
System.out.println("null");
else
System.out.println(voiceChannel.getIdLong());
System.out.println(voiceChannel.getPosition());
System.out.println(channel.getId());
channel.getParent().modifyVoiceChannelPositions().selectPosition(channel).moveTo(guild.getVoiceChannelById(currentAutoVoiceChannels.get(type).get(0)).getPosition() + (i - 1)).queue();*/
System.out.println("test3");
System.out.println("test4");
【问题讨论】:
我们不知道您如何打包和运行应用程序。看起来您运行的代码不是 IDE 编译的代码。从加载 .class 文件的位置进行调试,并检查构建/运行管道以查找加载不同版本的类的位置。它可能是某个 jar 文件或具有相同类的库,它首先出现在应用程序的类路径中。 我通过单击 Intellij 右上角的绿色运行箭头来运行项目,它会在运行之前构建。我仍然是编码的半初学者,并且我不使用 Intellij 中的大多数功能,所以我不知道您所说的“从我们加载 .class 的位置调试...”是什么意思,您能告诉我吗?一种我可能会更好理解的方式? 如果您在此代码上放置断点并在调试模式下启动应用程序,它会在断点处停止吗?断点是什么样子的?依赖项中的任何 jar 定义了与源中相同的类? 好的,我在调试模式下运行它,在当前代码(这似乎不是正在运行的代码)中的一个系统输出上有一个断点行,但调试选项卡中没有出现任何内容.另外我认为这个问题与代码没有任何关系,因为我可以添加/删除我的任何代码,并且它的运行就像代码从未改变一样。我不知道您所说的“依赖项中的任何 jars 定义了与源代码中相同的类”是什么意思?但如果你想在此处查看我的 pom.xml for maven:pastebin.com/xF6Kgn76 没关系。结果 Intellij 正在检测我的代码更改,只是我有 3 个 if 语句为不同类型运行相同的代码,而我忘记更新最后 2 个 if 语句。 【参考方案1】:程序控制本身很可能没有进入 if 语句,因此没有检测到它。只需尝试标记行 if (!splitName[2].equals(String.valueOf(i)))
并启动调试器。这将告诉控件是否到达这里。
【讨论】:
它确实到达了 if 语句中,只是在我运行时无论出于何种原因它都无法识别我的新代码。以上是关于Intellij 在运行时不会检测到代码更改的主要内容,如果未能解决你的问题,请参考以下文章
IntelliJ 和 Tomcat....更改的文件不会被 Tomcat 自动识别
IntelliJ 在运行所有测试时不会刷新多模块测试中的 Spring 自动配置