Java ';源代码与字节码不匹配';使用IDEA调试JdbcTemplate
当我调试JdbcTemplate源代码use IDEA时,IDE提示我:“源代码与字节码不匹配” 截图: 我使用mvn管理我的项目;我的maven pom配置是:Java ';源代码与字节码不匹配';使用IDEA调试JdbcTemplate,java,spring,orm,ibatis,Java,Spring,Orm,Ibatis,当我调试JdbcTemplate源代码use IDEA时,IDE提示我:“源代码与字节码不匹配” 截图: 我使用mvn管理我的项目;我的maven pom配置是: <dependency> <groupId>org.springframework</groupId> <artifactId>org.springframework.orm</artifactId>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>org.springframework.orm</artifactId>
<version>3.0.5.RELEASE</version>
</dependency>
org.springframework
org.springframework.orm
3.0.5.1发布
当编译的代码与源代码不匹配时,Intellij会给出这样的警告。ie您尝试调试代码,该代码已更改,不再构建
确保在导入代码后,没有修改任何部分,如果修改,则首先构建/编译代码,然后仅启动调试
例如,以下代码将导致此警告:-
public class HelloSO {
public static void main(String[] args) {
System.out.println("First time source code");
}
}
现在您编译了上述类并开始调试它,一切正常
但在这之后,您再添加一条print语句,并尝试将调试点放在该行上,而不重新编译它,那么在这种情况下,不会生成新行的字节码,因此,您将从IntelliJ收到相同的警告。对于我来说,出现此问题是因为我对源代码进行了更改,但尚未将其部署到目标设备。它仍然允许我设置令人困惑的调试,但随后给了我这个错误
要修复:
重建项目/模块
重新部署到目标设备
运行调试器
重建/重新部署后,调试和部署的代码将匹配,您不应该再收到任何错误!只需将两个二进制文件进行匹配。在查看了有关此问题的其他类似问题和答案后(这些问题和答案对我都没有帮助),解决此问题的方法只是添加一个依赖项。在我的例子中,我在调试org.springframework.web.servlet.DispatcherServlet时遇到了这个问题。我终于注意到IntelliJ在我的导入中找不到javax.servlet
在我的Maven项目中,我添加了
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>8.0.1</version>
</dependency>
爪哇
JavaEEAPI
8.0.1
我的pom.xml解决了这个问题
仔细检查是否正在解析所有导入。如果您有多个依赖项,并且这些依赖项本身具有相同依赖项的不同版本,则也可能发生这种情况。JetBrains网站上的这篇文章展示了如何在首选项中启用备用源切换器
我也有同样的问题。根本原因是两个不同的jar包有一些冲突。因此,我通过删除一个冲突的jar包来解决它。我今天遇到了一个与您类似的问题。我发现我的IntelliJ设置为使用Java版本16,而我的项目是在Java版本11中构建的
为了修复它,我做了如下操作:单击文件->项目结构->项目设置->项目,并将“项目SDK”属性更改为版本11
单击“确定”按钮后,我再也没有收到“源代码与字节码不匹配”的消息。我没有修改任何内容,仍然在oracle.ucp.jdbc.PoolDataSourceImpl上收到该消息。
。。。源代码由IntelliJ从类文件反编译。所以根本没有修改。@nephettom这个类是来自您最近添加的新jar吗?不是真的。。。这只发生在从Maven依赖项添加的JAR中。这种情况发生在属于Oracle UCP jar的类和MyBatis jar的类中。我想这是一个IntelliJ问题,它变得混乱并显示了这条消息。@Nephettom,你是否杀死了intellijI任务栏上的任何进程?我真的不知道你所说的“IntelliJ任务栏”是什么意思。。。但我不会杀死或关闭任何东西。我只是使用调试器。有时发生,有时不。。。使用相同的类并且不重新编译任何东西。如何“部署”它?