一、错误情况介绍
刚开始一直不知道这个是什么问题,网上的答案莫衷一是,看到有网友说是端口占用问题,但是我看idea中没有说这个问题:
这是报错情况。
我又点击了exec那一行,终于显示出错误原因了:
APPLICATION FAILED TO START
***************************
Description:
Web server failed to start. Port 8011 was already in use.
Action:
Identify and stop the process that's listening on port 8011 or configure this application to listen on another port.
[ERROR] Command execution failed.
org.apache.commons.exec.ExecuteException: Process exited with an error: 1 (Exit value: 1)
at org.apache.commons.exec.DefaultExecutor.executeInternal (DefaultExecutor.java:404)
at org.apache.commons.exec.DefaultExecutor.execute (DefaultExecutor.java:166)
at org.codehaus.mojo.exec.ExecMojo.executeCommandLine (ExecMojo.java:982)
at org.codehaus.mojo.exec.ExecMojo.executeCommandLine (ExecMojo.java:929)
at org.codehaus.mojo.exec.ExecMojo.execute (ExecMojo.java:457)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:137)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:210)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:156)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:148)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81)
at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56)
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128)
at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:305)
at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192)
at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105)
at org.apache.maven.cli.MavenCli.execute (MavenCli.java:957)
at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:289)
at org.apache.maven.cli.MavenCli.main (MavenCli.java:193)
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:64)
at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke (Method.java:564)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:282)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:225)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:406)
at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:347)
at org.codehaus.classworlds.Launcher.main (Launcher.java:47)
重点是这一句话:
Description:
Web server failed to start. Port 8011 was already in use.
这就很明显了,确实是端口被占用了。可是我不明白,我通过IDEA关闭了正在运行的项目,怎么会对应的监听端口没有被关闭呢?之前一直都这么做的,难道是与idea的版本有关吗?这个不去纠结它了,先把对应的端口的进程给kill再说。
二、解决方案
在windows上,通过dos命令,即输入cmd回车,然后输入:
# 8010是你占用的端口号
netstat -ano|findstr 8010
结果如图:
最后面的9004就是监听的对应的端口号,我们kill掉即可。
此时再启动该项目即可。
关于杀掉进程的概述:
- 通过 cmd 打开 DOS 命令,或在 IDE 的下边的“终端”操作命令行
- netstat -ano | findstr 8010
- taskkill /pid 8476 /f 或 taskkill -f /pid 8476
出现这种情况是偶然的原因吗?我尝试关闭软件、关机重启多次,发现依然出现这种情况。有的网友说idea要关闭两次,其实不是这个问题。貌似IDE之前的版本是这样的,我这个是2021版的,点击一次stop就立马弹出:
三、错误验证
即: Process terminated,再启动就还是文章开头那个错误了。
这里我们是不是换一种思路,怎么正确的关闭idea,或者说怎么正确地停止java项目?这么提问方式找不到什么答案,我们再换一个,Idea强制关闭后项目端口依然被占用的解决方案?
发现他们给出的方案都是我上面讲的,找到端口占用的进程,杀掉进程,而没有从根本上解决我遇到的这个问题。
网上还有人说,这种情况是貌似我们通过idea关闭了项目,实际上没有关闭,项目还在后台运行,因为端口依然被监听,是这样的吗?那我们写一个controller调用一下不就知道了吗?如果关闭程序后,依然可以连通,那就确实是在后台运行了。
我们调用controller,看到返回结果:
现在我们关闭程序,再调用试试:
结果发现还真是的,不管怎么刷新浏览器,还是会有上面的放回结果:
Hello World 扣减库存
确实是没有关闭程序,导致端口依然被占用,应该是idea出了问题。但是怎么解决呢?
四、一般方案尝试
网上找到一个方案:
图片来源:
IDEA 窗口关闭 进程还在
这篇文章给出了答案,而且标题写的简洁明了。
我打开我的IDE后,发现如图:
和上面博主的不太一样,不过不要紧,大致应该是差不多的。
意思是什么呢?
关闭正在运行的进程的工具窗口时:
终止进程;
断开;
询问
大家看到,我这个默认的是询问,但是貌似也没有询问什么玩意,我们修改为“Terminate process”试试。
但是还是不行,我都关闭了idea了,浏览器访问刚才的地址还是出现正确的返回结果。那是不是重启之后刚才的配置修改才能生效呢?我们重启idea,然后杀掉进程,再重新启动项目再关闭试试。
杀掉进程之后,还是不行,这个方案我觉得不ok。
就到这里吧,我已经折腾了几天了,搞不定暂时!
五、彻底解决方案
时间:2022年5月5日10:38:59
以上是我之前遇到的情况,一直没有解决,直到今天,看到评论区的兄弟给出了一个方案:
【报错】:org.apache.commons.exec.ExecuteException: Process exited with an error: 1 (Exit value: 1)
我使用了第一个方案,完美解决。
我们看到左上角那几个按钮,这个是正常的。不正常的不是这样显示的,如图:
这是不正常的显示,具体可以参考我的这篇文章:
IDEA上Java项目启动全部报错
不正常的这个,点击关闭的时候,这个 Application 会一直转圈。
解决方案我们也在此记录一下:
方案一
取消上面打的√。默认的可能是不勾选的,但是不知道什么情况,它给打钩上了,所以导致我们关闭应用程序后,进程没有自动关闭。
方案二
在POM中加入依赖:
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.6.0</version>
<configuration>
<classpathScope>test</classpathScope>
</configuration>
</plugin>
</plugins>
方案一,亲测可用;方案二,没有测试,应该也是可以的。
至此,我们完美解决了这个问题。
在此,谢谢评论区的 苇草2020 兄弟。他的主页是:
苇草2020的博客_CSDN博客-领域博主
同时,也感谢:上面文章的博主。
总结
- 报错情况:Java项目启动报错:Process exited with an error: 1 (Exit value: 1)
- 错误原因:应用程序关闭后,进程不能同步关闭
- 网上的一般解决方案,都是通过命令行解决。这个不能彻底解决,每次都要手动操作,很麻烦
- 最终解决方案:参见上面方案一和方案二
版权归原作者 北冥牧之 所有, 如有侵权,请联系我们删除。