9

OS システム (windows 7 Ultimate 64 ビット) の tomcat インストール ディレクトリを参照するシステム変数を定義しますCATALINA_HOME。Java で取得したいのですが、コードは以下のとおりです。

System.out.println(System.getenv("CATALINA_HOME"));

それはnullを返します。この変数がシステムに存在することは間違いありませんset catalina_home。cmdコンソールに入力すると、割り当てられた値が正確に表示されます。

では、なぜそれを取得できないのですか、またはシステム環境変数を取得する他の方法がありますか?

PS : 以下は、 によって取得されるすべての変数ですSystem.getenv()

    Map<String, String> env = System.getenv();
    for (String key : env.keySet())
    {
        System.out.println(key + ":" + env.get(key));
    }

    System.out.println(System.getenv("CATALINA_HOME"));

出力:

USERPROFILE:C:\Users\chorusheng
ProgramData:C:\ProgramData
PATHEXT:.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC
JAVA_HOME:C:\Program Files\Java\jdk1.6.0_20
ProgramFiles(x86):C:\Program Files (x86)
TEMP:C:\Users\CHORUS~1\AppData\Local\Temp
SystemDrive:C:
ProgramFiles:C:\Program Files
Path:C:/Program Files (x86)/Java/jre7/bin/client;C:/Program Files (x86)/Java/jre7/bin;C:/Program Files (x86)/Java/jre7/lib/i386;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;d:\Program Files (x86)\KOUTON\CTBS Standard Client;C:\Program Files (x86)\PC Connectivity Solution\;D:\oracle\product\11.2.0\dbhome_1\bin;C:\Program Files (x86)\Common Files\NetSarang;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\Intel\WiFi\bin\;C:\Program Files\Common Files\Intel\WirelessCommon\;C:\Program Files (x86)\EgisTec BioExcess\;C:\Program Files (x86)\EgisTec BioExcess\x64;C:\Program Files (x86)\Common Files\Thunder Network\KanKan\Codecs;d:\Program Files (x86)\Tencent\QQPCMgr\6.6.2150.401;D:\Program Files (x86)\TortoiseSVN\bin;d:\Program Files (x86)\DigiWin OpenVPN\bin;d:\Program Files (x86)\Tencent\QQPCMgr\6.6.2150.401;F:\chega\eclipsej2ee3.7;
HOMEDRIVE:C:
DYNA_HOME:E:\plm
PROCESSOR_REVISION:2502
USERDOMAIN:chorus
ALLUSERSPROFILE:C:\ProgramData
ProgramW6432:C:\Program Files
PROCESSOR_IDENTIFIER:Intel64 Family 6 Model 37 Stepping 2, GenuineIntel
SESSIONNAME:Console
TMP:C:\Users\CHORUS~1\AppData\Local\Temp
CommonProgramFiles:C:\Program Files\Common Files
CLASSPATH:.;C:\Program Files\Java\jdk1.6.0_20\lib\dt.jar;C:\Program Files\Java\jdk1.6.0_20\lib\tools.jar;
LOGONSERVER:\\CHORUS
PROCESSOR_ARCHITECTURE:AMD64
FP_NO_HOST_CHECK:NO
OS:Windows_NT
HOMEPATH:\Users\chorusheng
PROCESSOR_LEVEL:6
CommonProgramW6432:C:\Program Files\Common Files
1830B7BD-F7A3-4c4d-989B-C004DE465EDE:f44:431b280
LOCALAPPDATA:C:\Users\chorusheng\AppData\Local
COMPUTERNAME:CHORUS
windir:C:\Windows
SystemRoot:C:\Windows
asl.log:Destination=file
NUMBER_OF_PROCESSORS:4
USERNAME:chorusheng
PUBLIC:C:\Users\Public
PSModulePath:C:\Windows\system32\WindowsPowerShell\v1.0\Modules\
CommonProgramFiles(x86):C:\Program Files (x86)\Common Files
ComSpec:C:\Windows\system32\cmd.exe
APPDATA:C:\Users\chorusheng\AppData\Roaming
null

ご覧のとおり、最後の行は null で、CATALINA_HOME 変数の値です。

PS : 私の tomcat はインストール版ではありません。

4

2 に答える 2

14

考えられる理由:

  1. set CATALINA_HOMEコマンドプロンプトで使用しました。これにより、この変数はこのウィンドウに対してローカルになります。このコマンド プロンプトから開始されたプロセスには表示されますが、それ以外の場所には表示されません。My Computer > Advanced > Environment Variables変数をすべての新しいプロセスから見えるようにするために使用します。

  2. 変数を読み取ろうとするプロセスはすでに実行中です。再起動します。

    注: デバッガーから Tomcat を開始する場合は IDE である可能性があり、コマンド ラインから開始する場合はスタンドアロンの Tomcat プロセスである可能性があります。

  3. Tomcat の開始スクリプトは、呼び出す前に変数の設定を解除しますjava.exe

  4. Tomcat は、その Java コードで変数の設定を解除します。

于 2013-05-07T08:01:34.567 に答える