当我调试JdbcTemplate源代码使用IDEA时,IDE提示我:'源代码与字节码不匹配'
截图:
我使用mvn来管理我的项目;我的maven pom配置是:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>org.springframework.orm</artifactId>
<version>3.0.5.RELEASE</version>
</dependency>
答案 0 :(得分:3)
当编译的代码与源代码不匹配时,Intellij会发出警告。即您尝试调试已更改但未再次构建的代码。
确保在导入代码后,您没有修改任何部分,如果您修改了,那么首先构建/编译它,然后才开始调试。
例如下面的代码会导致此警告: -
public class HelloSO {
public static void main(String[] args) {
System.out.println("First time source code");
}
}
现在你编译了上面的类并开始调试它,一切正常。
但是之后再添加一个print语句并尝试将调试点放在该行上而不重新编译它,然后在这种情况下因为没有生成新行的字节代码,因此您将从IntelliJ获得相同的警告
答案 1 :(得分:1)
如果您有多个依赖项,而这些依赖项本身具有相同依赖项的不同版本,则也会发生这种情况。 JetBrains网站上的这篇文章展示了如何在首选项中启用备用源切换器。
答案 2 :(得分:0)
对我来说,出现此问题是因为我对源代码进行了更改,但尚未将其部署到目标设备。它仍然使我能够设置令人困惑的调试程序,但随后却给了我这个错误。
要解决:
重建/重新部署后,调试和已部署的代码将匹配,并且您不应再出现任何错误!只需匹配两个二进制文件即可。
答案 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。
点击确定按钮后,我没有再收到消息“源代码与字节码不匹配”。