【问题标题】:NoClassDefFoundError after IntelliJ IDEA upgradeIntelliJ IDEA 升级后出现 NoClassDefFoundError
【发布时间】:2017-07-24 01:43:12
【问题描述】:

最近我创建了一个使用 IntelliJ IDEA 和 Gradle 进行依赖管理的新项目。解决项目所需的所有依赖项并运行它后,我收到以下错误:

java.lang.NoClassDefFoundError: org/springframework/boot/SpringApplication
    at com.some.fancy.name.Application.main(Application.java:13)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
Caused by: java.lang.ClassNotFoundException: org.springframework.boot.SpringApplication
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 6 more

问题仅出现在已解决依赖项中的类上(我也尝试了使用来自 Guava 的 Cache 的简单 main 程序)。导致错误的类如下:

@SpringBootApplication
public class Application {
    public static void main(String... args) {
        SpringApplication.run(Application.class, args);
    }
}

所有字段都显示正确的颜色(注释为黄色,没有红色),IntelliJ 在External Libraries 目录中具有所有已解析的依赖项。我正在使用绿色的“运行”箭头来启动项目。

从命令行使用 gradle 时,创建一个 fat jar 然后一切正常。我已经尝试过“使缓存/重启无效”,从存储库中拉出几次项目,清除了 gradle 缓存,手动删除了所有依赖项,尝试使用社区版、终极版运行它,运行已经运行的旧项目前一段时间(现在不工作)。

是否与将 IntelliJ IDEA 更新到 2016.3.4,构建 163.12024.16 有某种关系?

【问题讨论】:

    标签: intellij-idea gradle


    【解决方案1】:

    这是 IntelliJ IDEA 中特定于 Gradle 3.4 及更高版本的已知问题:

    它已经在IntelliJ IDEA 2017.12016.3.6 中修复。

    如果您不能或不想更新 IntelliJ IDEA,也可以使用 Gradle 3.3 或更早版本作为解决方法。

    【讨论】:

    • 只是一个注释,以防其他人遇到同样的问题。这不是 Gradle 3.4 特有的,因为 3.5 仍然存在问题。该修复程序确实有效(更新 IntelliJ),因此解决方案仍然有效。
    • 我也面临同样的问题。就我而言,我可以在使用 IntelliJ/Maven 编译它并通过终端 (java -jar myapp.jar) 运行它时运行它。但是当我尝试从 IntelliJ 菜单运行它时,它会出现此错误。另外,如果我用 Eclipse 运行它,一切都运行良好。很奇怪! IDEA很不稳定!这是我用了 2 年多后得出的结论,很遗憾。
    • 2017.3 再次出现同样的问题 :(
    • @StefanHaustein 那不是同一个问题,请在youtrack.jetbrains.com/issues/IDEA报告
    • 附注我试图将我的 gradle 包装器切换回 gradle 3.3(也看看这是否是一个回归),但是 gradle 3.3。不支持 google(),所以这似乎不再是跨平台项目的选择......
    【解决方案2】:

    将 gradle 版本设置为 3.3 更正了此问题。

    【讨论】:

      【解决方案3】:

      我遇到了同样的问题,从前一天运行良好的 Spring Boot 应用程序中得到以下错误。我正在使用 IntelliJ 2020.3、Gradle 6.5.1。我怀疑我的存储库可能已损坏。

      Caused by: java.lang.ClassNotFoundException: org.springframework.boot.SpringApplication
      

      在我的 IntelliJ 多次尝试之后,我尝试了 bootRun(在 gradle 树中,您可以在 Tasks > application > bootRun 下找到它)并且它成功了。

      【讨论】:

      • 谢谢,我花了好几个小时才让它工作。这是唯一有用的解决方案!
      猜你喜欢
      • 1970-01-01
      • 2013-11-04
      • 2023-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-09
      • 1970-01-01
      • 2015-06-01
      相关资源
      最近更新 更多