在IDEA上部署Java项目启动报错怎么解决

发布时间:2022-5-25 13:24

在IDEA上的Java项目本来是好好的,不管是编译还是启动都没问题。现在是不知道什么原因,竟然全部报错了,不管打开哪个类文件都报错。

首先排除:

  1. settings文件
  2. maven导入
  3. jdk版本

在开篇中我们说到了,项目本来是好好的,所以以上问题应该是没问题的。不过这也不是绝对的,为什么这么说呢?因为我的idea是加载了多个项目,启动不同项目的时候启动了多个idea窗口,并没有把这些不同的项目放在同一个idea启动窗口中作为不同模块来打开。这不同的项目的jdk版本是不一样的,我修改过他们的jdk版本,包括模块本身的、项目的,以及项目编译的字节码文件。如图:

1. 项目模块

我们看到,模块中 源 和 依赖 的jdk版本是不一致的。这是我最终解决问题之后的样子。如此看来,它们两个不一致也不要紧的。

2. 项目

这两个地方,原先是 jdk15,如图也是解决问题之后的设置。

3. 构建、执行、部署

如图所示,是解决问题之后的设置。之前的 项目字节码版本 设置的是jdk15,按模块字节码版本中的 目标字节码版本也是15,但是设置之后自动变成了 1.8。

至于为什么会出现好好的项目就全部报错飘红了,这个原因自然是我们项目中的一些默认设置改动了,具体是什么呢?我们这里先不管它。推荐一篇文章:

IDEA打开项目所有东西都在报红报错

这篇文章已经说的很好了。

出现项目前面报错的情况,很多时候不是settings和maven导入的问题,当然,如果你的项目是第一次导入或者第一次从Git上拉取下来是有这个可能的,这种情况就很简单了,在此不再赘述。本篇讨论的重点是:

好端端的项目,怎么就全部报错了呢?

常规的解决问题方案我们都尝试过了,看到上面推荐的这篇文章的 解决方案二,我们尝试之后,还是不行,然后又清理了缓存,最终解决了问题。

说一下我解决这个问题的思路:

  1. 检查settings设置
  2. 检查maven,清理、打包,或重新导入重启项目
  3. 修改项目各处的jdk版本,使之一致
  4. 清理缓存
  5. 删除 .idea文件夹,并清理缓存,重启项目

最终,成功地解决了问题。

结论:通过上面的 5可以解决问题。

正如推荐的这篇文章所说:

删除文件夹下的.idea文件夹和xxx.iml文件,然后重新打开就可以了。

***出错原因:***动了project Structure ——Modules中Sources下的make as的东西,即随意点了一个导致。 而xxx.iml和.idea文件的作用分别是:

.iml是 intellij idea的工程配置文件,里面是当前project的一些配置信息,有包的存放位置;

.idea存放项目的配置信息,包括历史记录,版本控制信息等所有,只要删除这两个文件,重启,就可恢复默认;

然后是清理缓存:

文件——清理缓存

清理并重新启动。

不过这种方式导致了一个问题,我们上面也提到了,自动修改了字节码版本设置,以及项目结构中的设置,竟然给我设置成了jdk17.当然,这个17是我项目中的SDK本来就添加过的。

而且,这种方式导致的就是我项目正常启动,然后点击关闭的时候,项目貌似是关闭了(从idea上看,貌似是的,但是你的项目启动详情那个地方一直在转圈,显然是没有关闭掉的)。

上面红框的地方,在我项目关闭的时候一直在转圈。上图是我重新启动时候报错的图。报错原因是:

说白了就是端口冲突,也就是之前关闭项目的时候监听进程还是在运行状态,其实就是项目没有关闭。

这个问题怎么解决呢?

有两种思路:

1.关闭进程;

2.真正解决问题

上面的1,大家可以自行百度,或者参考我的这篇文章:

Java项目启动报错:Process exited with an error: 1 (Exit value: 1)

真正解决问题,我也不知道,我曾经尝试了一天的时间,也问了一些朋友,他们给出的方案都不行。

但是在这篇文章中,我们项目本来是好的,最终全面报错。在全面报错的时候我项目启动是没问题的,这个貌似是项目没有编译的缘故,但是我重新编译之后还是正常启动,就是项目钱不报错。

说明这个时候我们关闭项目是没问题的。只不过是因为我们删除了.idea文件夹和清理了缓存,最终我们标题中的问题解决了,但是出现了现在讨论的问题。

我们在说这个问题的解决思路的时候,我们给出了图片,也讲到了,通过上面这种方式导致的字节码版本问题,以及项目本身的jdk自动修改的问题。那么我们是还不是可以修改一下字节码版本方面,把我们现在遇到的这个问题解决呢?其实我们就改动了这几个jdk的地方,以及删除了文件夹和清理了缓存。后面这两个我们不能回到以前了,但是修改的jdk是可以的。

修改之后,发现还是不行,而且代码又全部报错了:

而且又出现了我上面说的问题,关闭项目时,项目一直转圈:

同时,我的控制台打印的日志,中文的一直报错。这个当然是编码问题,但是我修改了所有的编码,都解决不了这个问题。这个和我上面的那篇文章中遇到的问题一模一样。

就这样吧,等后续有方案了再说。

GoLang与Java各自生成grpc代码流程介绍 生活杂谈

GoLang与Java各自生成grpc代码流程介绍

1.背景: 由于公司的日志系统使用的是plumelog,最近生产环境老是报 jedis连接池不够,导致丢失日志,而且服务老是重启,怀疑跟日志系统有关,于是自己改造plumelog,使用go grpc...
Java Process中waitFor()的问题详解 生活杂谈

Java Process中waitFor()的问题详解

在编写Java程序时,有时候我们需要调用其他的诸如exe,shell这样的程序或脚本。在Java中提供了两种方法来启动其他程序: (1) 使用Runtime的exec()方法 (2) 使用Proces...
Java数据结构之有向图的拓扑排序详解 生活杂谈

Java数据结构之有向图的拓扑排序详解

在现实生活中,我们经常会同一时间接到很多任务去完成,但是这些任务的完成是有先后次序的。以我们学习java 学科为例,我们需要学习很多知识,但是这些知识在学习的过程中是需要按照先后次序来完成的。从...