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和SVN:提交时“未检测到任何更改”

IntelliJ 和 Tomcat....更改的文件不会被 Tomcat 自动识别

IntelliJ 在运行所有测试时不会刷新多模块测试中的 Spring 自动配置

当我按下运行时,Intellij Idea 没有构建

google colab 使用本地运行时并且未检测到本地 gpu

TeamCity 不会触发自动构建