'源代码与字节码不匹配'使用IDEA调试JdbcTemplate

时间:2017-08-22 02:07:58

标签: java spring orm ibatis

当我调试JdbcTemplate源代码使用IDEA时,IDE提示我:​​'源代码与字节码不匹配'

截图:

enter image description here

我使用mvn来管理我的项目;我的maven pom配置是:

<dependency>
                <groupId>org.springframework</groupId>
                <artifactId>org.springframework.orm</artifactId>
                <version>3.0.5.RELEASE</version>
  </dependency>

6 个答案:

答案 0 :(得分:3)

当编译的代码与源代码不匹配时,Intellij会发出警告。即您尝试调试已更改但未再次构建的代码。

确保在导入代码后,您没有修改任何部分,如果您修改了,那么首先构建/编译它,然后才开始调试。

例如下面的代码会导致此警告: -

    public class HelloSO {
    public static void main(String[] args) {
        System.out.println("First time source code");
    }
  }

现在你编译了上面的类并开始调试它,一切正常。

但是之后再添加一个print语句并尝试将调试点放在该行上而不重新编译它,然后在这种情况下因为没有生成新行的字节代码,因此您将从IntelliJ获得相同的警告

答案 1 :(得分:1)

如果您有多个依赖项,而这些依赖项本身具有相同依赖项的不同版本,则也会发生这种情况。 JetBrains网站上的这篇文章展示了如何在首选项中启用备用源切换器。

https://intellij-support.jetbrains.com/hc/en-us/community/posts/206822215-what-does-Choose-Sources-do-and-how-can-I-undo-what-it-does-

答案 2 :(得分:0)

对我来说,出现此问题是因为我对源代码进行了更改,但尚未将其部署到目标设备。它仍然使我能够设置令人困惑的调试程序,但随后却给了我这个错误。

要解决:

  1. 重建项目/模块
  2. 重新部署到目标设备
  3. 运行调试器

重建/重新部署后,调试和已部署的代码将匹配,并且您不应再出现任何错误!只需匹配两个二进制文件即可。

答案 3 :(得分:0)

在查看了关于该问题的其他类似问题和答案后,没有一个对我有帮助,解决问题的方法只是添加一个依赖项。就我而言,尝试调试org.springframework.web.servlet.DispatcherServlet时遇到了这个问题。我终于注意到IntelliJ在我的导入中找不到javax.servlet。

在我的Maven项目中,我添加了

<dependency>
  <groupId>javax</groupId>
  <artifactId>javaee-api</artifactId>
  <version>8.0.1</version>
</dependency>

我的pom.xml解决了这个问题。

仔细检查您所有的进口货物是否都已解决。

答案 4 :(得分:0)

我也有同样的问题。根本原因是两个不同的jar包有一些冲突。因此,我通过删除一个有冲突的jar包解决了这个问题。

答案 5 :(得分:0)

我今天遇到了和你一样的问题。我发现我的 IntelliJ 设置为使用 Java 版本 16,而我的项目是在 Java 版本 11 中构建的。

为了修复它,我这样做了:点击文件 -> 项目结构 -> 项目设置 -> 项目,并将“项目 SDK”属性更改为版本 11。

点击确定按钮后,我没有再收到消息“源代码与字节码不匹配”。