
ご覧のとおり、Java と Maven の JAVA_HOME と M2_HOME を定義し、パス環境変数に追加しました。
java または mvn コマンドを実行しようとすると、Windows ターミナルの PowerShell で正常に動作します。
Windows ターミナルおよび PowerShell での mvn:
しかし、新しいPowerShellまたはcmdを開いても機能しません
これらが Windows ターミナル内で動作し、スタンドアロンの PowerShell では動作しないのはなぜでしょうか? 変数が % % で囲まれていない場合は問題なく動作しています。たとえば、最初のスクリーンショットでは、nvm は Windows ターミナルと PowerShell の両方で正常に動作しています。
答え1
解決策が見つかったようですが、これが起こる理由は次のとおりです。
変数JAVA_HOME
を設定し、M2_HOME
ユーザー環境に追加しましたが、システム環境PATH。その場合、環境変数の設定で競合状態の問題が発生します。Windowsでは、ss64:
新しいプロセスが開始されると、変数は次の順序で読み込まれます。
- システム環境変数
- シェル変数(ユーザーごと)
- ユーザー環境変数
- シェル変数(その他)
そのため、通常は設定できませんユーザー内部の環境変数システム正しく展開されるようにします。新しい Windows ターミナルは逆の順序で動作したり、PATH の展開を異なる方法で処理したりするようですが、他のプロセスが動作することを保証するものではありません。
注目すべき点は次のとおりです:
# Powershell (core 7.2) terminal:
PS C:\Users\username> $env:path
C:\Program Files\PowerShell\7;%JAVA_HOME%;
# ^Bad, not expanded
# Windows Terminal, running Powershell 7.2:
PS C:\Users\username> $env:path
C:\Program Files\PowerShell\7;C:\Program Files\JavaFolder\jre\bin;
# ^Good
VS Code は、使用している端末の種類に応じて、いずれかの方法で動作します。
すべてを同じ環境に設定すると正常に動作します。次のいずれかを実行します。
JAVA_HOME
/M2_HOME
を追加ユーザーPATHから削除システムPATH、またはJAVA_HOME
として設定さM2_HOME
れシステム代わりに変数を使用してください。(これでうまくいったようです)