パーセント記号で囲まれた変数は環境変数として機能しません

パーセント記号で囲まれた変数は環境変数として機能しません

ご覧のとおり、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 は、使用している端末の種類に応じて、いずれかの方法で動作します。


すべてを同じ環境に設定すると正常に動作します。次のいずれかを実行します。

  1. JAVA_HOME/M2_HOMEを追加ユーザーPATHから削除システムPATH、または
  2. JAVA_HOMEとして設定さM2_HOMEシステム代わりに変数を使用してください。(これでうまくいったようです)

関連情報