一、缘起:

今日(2024-11-12 上午)研究idea环境变量问题 ,版本:IntelliJ IDEA 2024.1.2
原因如下:在项目中写了一个python脚本用于打包java项目并上传至远程服务器
使用脚本执行maven命令(mvn clean package)时报错

Maven 命令执行失败:Command 'mvn clean package' returned non-zero exit status 1.
错误输出:
The JAVA_HOME environment variable is not defined correctly
This environment variable is needed to run this program
NB: JAVA_HOME should point to a JDK not a JRE

ps:当然,其中有我自己设定的输出

这段报错的大概意思是,环境变量JAVA_HOME没有被正确的定义,应该指向jdk的路径而非jre的路径。

二、寻觅

百度后,经诸开发者、网友及AI指导,获得三句圣言:
遂使用idea自带Terminal运行如下三句圣言:
ps:Local_powershell 是我自己起的Terminal默认shell窗口名,下文会讲述一下

在这里插入图片描述

java -version  # 查看java版本
javac -version # 查看javac(编译器)版本
echo %JAVA_HOME% # 查看环境变量中JAVA_HOME配置的值(JAVA_HOME是我自己起的名字,自己随便起名,只要在别的地方能对应(相同)就行,有句话叫“万物皆键值对”,相信有一定开发经验的小伙伴都能理解。环境变量的配置方式也是键值对的方式。)

上面两个命令正常运行,但是使用echo打印的时候发现打印结果为
在这里插入图片描述

三、未果

顿感不妙,
连忙使用cmd窗口打印,正常
在这里插入图片描述
此时思考,为何idea打印不出来,为何cmd可以
思来想去,百思不得其解,
百度、AI,亦未发现原因。
百度查询关键词:IDEA 的terminal 的java版本及mvn 和cmd.exe的不一致
翻阅数篇文章,发现了一篇来自人均年均百万的China顶级社区的文章:
https://zhuanlan.zhihu.com/p/413032384
跟随其指导:
在这里插入图片描述
第一次发现IDEA Terminal竟然可以选择SSH的地址
(天!用了这么多年IDEA,竟然第一次知道可以这样!之前的岁月可真是活到狗身上去了。)
此时才发现,竟然有Powershell和Command(即cmd,后来才知道是CMD,但是这不重要)两个选项!
此时我的心中已经隐约有了些答案,于是打开setting:
在这里插入图片描述

只见在Tools-Terminal-Application Settings-Shell path中赫然配置着powershell.exe!
并且点击箭头他还可以选择默认使用cmd还是powershell,(cmd和powershell是两个命令行工具,感兴趣的小伙伴可以自行百度)
甚至还可以再Default tab name中设置自己想要的名字!
在这里插入图片描述
当然,这个不是重点。
相信眼尖的小伙伴应该已经看到了 Terminal终端中第一行打印着:Windows PowerShell
God,这么明显的提示我竟然从来没有注意过。
随后,百度powershell打印环境变量的语句:

$env:JAVA_HOME # JAVA_HOME是我自己设置的java路径的环境变量(key)名字,只要key能对应上,怎么起名都可以,哪怕用QWER、快乐EEE也一样。

OK,这下成功打印出了环境变量地址
在这里插入图片描述

四、缘灭?

好的,那么再次执行python脚本执行maven命令打包。
胜利就在眼前!!!

Maven 命令执行失败:Command 'mvn clean package' returned non-zero exit status 1.
错误输出:
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF8

好吧,还是有问题,但是至少排除掉了一部分问题。

五、缘未灭,再缘起!

继续研究…
……
……
……
……
……
……

========================================================================================================

后续:https://blog.csdn.net/qq_42589771/article/details/143720225

========================================================================================================

看看这次我学到了些什么东西:

1.idea Terminal终端可以选择不同的命令行工具,还可以用来连接远程数据库

在这里插入图片描述
其实这里我也不知道SSH连接是idea自带的功能还是装的插件

2.新思想:

万物皆k-v(键值对)
在编程中,数据往往因为过大或过于抽象难以直接使用或形容,所以用一个名字来代表其本身,这个思想在生活中也一样通用。
好比变量与变量名,变量名便代表着这个变量本身。
亦或好比人与人名,人名便代表着这个人,我们不可能用:“那个直立、两足行走、且有双目双耳、双手独口的生物”形容一个人。

3.环境变量

系统变量:指整个计算机系统中通用的变量,可以给任何用户使用
用户变量:只有对应用户才有的变量,在别的用户那里不通用,可以理解为作用域。
在这里插入图片描述
例如,我在系统环境配置一个系统变量:A,值:这是一个A
在任何用户下使用命令:echo %A%都可打印出值
在这里插入图片描述
如果我设置的是一个用户变量,切换用户后执行命令是无法打印出值,只会打印“A”

4.%xxx%

%xxx%
左右两个百分号,用来引用变量,“xxx”为变量名,若无对应的变量,则代表引用的是xxx

5.一个很好用的技巧:重启解决百分之九十九的问题

不过这里的重启指的是重启一个原本运行正常的程序,而非我们正在开发、漏洞百出甚至无法运行的程序。

在研究过powershell和cmd之后,发现IDEA Terminal打印的JAVA_HOME值是xx/xx/jdk-22,我没有22,于是打开win的环境变量配置,发现JAVA_HOME配置错了值,遂改正为xx/xx/jdk-21版本。
打开Tools-Terminal-Project Settings-Environment variables,发现其中的JAVA_HOME还是xx/xx/jdk-22,是旧的配置,说明IDEA并不会随着系统刷新环境变量。开发小伙伴都知道,没有热部署的程序都需要重新启动以加载配置,我不知道IDEA如何直接重新加载配置,遂关闭后重启,此时,IDEA中的环境变量值也加载为最新的
在这里插入图片描述

6.学到了几个命令:

echo %JAVA_HOME%  # cmd命令,输出XXX
$env:JAVA_HOME  # powershell命令,读取(输出)XXX
$env:PATH  # powershell命令,输出 PATH 环境变量中列出的所有目录路径
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐