【问题标题】:'Source code does not match the bytecode' use IDEA debug JdbcTemplate'源代码与字节码不匹配' 使用IDEA调试JdbcTemplate
【发布时间】:2018-01-30 03:57:17
【问题描述】:

使用IDEA调试JdbcTemplate源码时,IDE提示我:​​'Source code does not match the bytecode'

截图:

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

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

【问题讨论】:

    标签: java spring orm ibatis


    【解决方案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】:

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

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

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

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

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

      但是在那之后你再添加一个打印语句并尝试将调试点放在该行而不重新编译它,那么在这种情况下,因为没有生成新行的字节码,因此你会从 IntelliJ 收到相同的警告.

      【讨论】:

      • 我没有修改任何内容,仍然在oracle.ucp.jdbc.PoolDataSourceImpl 上收到该消息...源代码由 IntelliJ 从类文件中反编译。所以根本没有修改。
      • @nephewtom 这个类是来自你最近添加的新 jar 吗?
      • 不是真的......它只是发生在从 Maven 依赖项添加的 jar 中。它发生在属于 Oracle UCP jar 的类和来自 MyBatis jar 的类中。我想这是一个 IntelliJ 问题,会让人感到困惑并显示该消息。
      • @nephewtom,你有没有杀死intellij任务栏上的任何进程
      • 我真的不知道你所说的“intellij 的任务栏”是什么意思......但我没有杀死或关闭任何东西。我只是使用调试器。有时会发生,有时不会……使用相同的类且无需重新编译任何内容。
      【解决方案3】:

      在查看了关于这个问题的其他类似问题和答案后,没有一个对我有帮助,解决问题的方法只是添加一个依赖项。就我而言,当我尝试调试 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】:

        对我来说,之所以会出现这个问题,是因为我对源代码进行了更改,但尚未将它们部署到目标设备。它仍然允许我设置令人困惑的调试,但随后给了我这个错误。

        修复:

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

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

        【讨论】:

        • 你如何“部署”它?
        【解决方案5】:

        我也有同样的问题。根本原因是两个不同的jar包有一些冲突。所以我通过删除一个有冲突的 jar 包来解决它。

        【讨论】:

          【解决方案6】:

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

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

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

          【讨论】:

            猜你喜欢
            • 2017-06-29
            • 2017-02-20
            • 1970-01-01
            • 2020-12-12
            • 2019-01-16
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多