[英]How to get JAVA_HOME and CATALINA_HOME environment variables in Java?
I need to get the values of JAVA_HOME and CATALINA_HOME environment variable in Java. 我需要在Java中获取JAVA_HOME和CATALINA_HOME环境变量的值。 I am running a JAR (not WAR) and in
System.getProperties()
I could find only "java.home"
. 我正在运行JAR(不是WAR),而在
System.getProperties()
我只能找到"java.home"
。
I read some other questions about it here, tried them, but could not make them work - I got different exceptions or just null
value as a result. 我在这里阅读了一些关于它的其他问题,尝试了它们,但是无法使它们工作 - 我得到了不同的例外或者只是因为
null
值。
I remember doing something similar many years ago using JNA , but it was in the 16-bit era of Windows. 我记得多年前使用JNA做类似的事情,但它是在Windows的16位时代。 The latest JNA jar I could find is from 2011, running it in intelliJ works, but when I make a build in maven I get errors about not finding some classes.
我能找到的最新JNA jar是从2011年开始运行的,但是当我在maven中进行构建时,我得到的错误是找不到一些类。
I will continue investigating the JNA direction and will be glad to receive any assistance and/or ideas. 我将继续调查JNA方向,并乐意接受任何帮助和/或想法。 I think that I'm only missing the right Maven dependency .
我认为我只是错过了正确的Maven依赖 。
This is source code for my class so far: 到目前为止,这是我班级的源代码:
// C:\devtools\java-external-jars\jna-4.2.2\jna-platform-4.2.2.jar
import com.sun.jna.platform.win32.Advapi32Util;
import com.sun.jna.platform.win32.WinReg;
import java.io.IOException;
import java.io.InputStream;
import java.io.StringWriter;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;
import java.util.ArrayList;
import java.util.List;
import java.util.prefs.Preferences;
public class WinRegistryHelper {
public static final String SYSTEM_ENVIRONMENT_KEY_PATH = "SYSTEM\\ControlSet001\\Control\\Session Manager\\Environment";
public static final int HKEY_CURRENT_USER = 0x80000001;
public static final int HKEY_LOCAL_MACHINE = 0x80000002;
public static final int REG_SUCCESS = 0;
public static final int REG_NOTFOUND = 2;
public static final int REG_ACCESSDENIED = 5;
private static final int KEY_ALL_ACCESS = 0xf003f;
private static final int KEY_READ = 0x20019;
private static final Preferences userRoot = Preferences.userRoot();
private static final Preferences systemRoot = Preferences.systemRoot();
private static final Class<? extends Preferences> userClass = userRoot.getClass();
private static final Method regOpenKey;
private static final Method regCloseKey;
private static final Method regQueryValueEx;
private static final Method regEnumValue;
private static final Method regQueryInfoKey;
private static final Method regEnumKeyEx;
private static final Method regCreateKeyEx;
private static final Method regSetValueEx;
private static final Method regDeleteKey;
private static final Method regDeleteValue;
private WinRegistryHelper() { }
/**
*
* {@code String stringValue = Advapi32Util.registryGetStringValue(WinReg.HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion", "ProductName");}
*/
public static String registryGetStringValue(WinReg.HKEY root, String keyPath, String keyName) {
// Read a string
String stringValue = Advapi32Util.registryGetStringValue(root, keyPath, keyName);
System.out.printf(keyName + " value is: %s\n", stringValue);
return stringValue;
}
/**
*
* {@code int timeout = Advapi32Util.registryGetIntValue(WinReg.HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Windows", "ShutdownWarningDialogTimeout");}
*/
public static int registryGetIntValue(WinReg.HKEY root, String keyPath, String keyName) {
// Read an int (& 0xFFFFFFFFL for large unsigned int)
int intValue = Advapi32Util.registryGetIntValue(root, keyPath, keyName);
System.out.printf(keyName + " value is: %d (%d as unsigned long)\n", intValue, intValue & 0xFFFFFFFFL);
return intValue;
}
/**
*
* {@code int timeout = Advapi32Util.registryGetLongValue(WinReg.HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Windows", "ShutdownWarningDialogTimeout");}
*/
public static long registryGetLongValue(WinReg.HKEY root, String keyPath, String keyName) {
// Read an int (& 0xFFFFFFFFL for large unsigned int)
long longValue = Advapi32Util.registryGetLongValue(root, keyPath, keyName);
System.out.printf(keyName + " value is: %d (%d as unsigned long)\n", longValue, longValue & 0xFFFFFFFFL);
return longValue;
}
/**
*
* {@code Advapi32Util.registryCreateKeyPath(WinReg.HKEY_CURRENT_USER, "SOFTWARE\\StackOverflow");}
*/
public static void registryCreateKeyPath(WinReg.HKEY root, String keyPath) {
// Create a key and write a string
Advapi32Util.registryCreateKey(root, keyPath);
}
/**
* {@code Advapi32Util.registrySetStringValue(WinReg.HKEY_CURRENT_USER, "SOFTWARE\\StackOverflow", "url", "http://stackoverflow.com/a/6287763/277307");}
*/
public static void registrySetStringValue(WinReg.HKEY root, String keyPath, String keyName, String keyValue) {
Advapi32Util.registrySetStringValue(root, keyPath, keyName, keyValue);
}
public static void registrySetIntValue(WinReg.HKEY root, String keyPath, String keyName, int keyValue) {
Advapi32Util.registrySetIntValue(root, keyPath, keyName, keyValue);
}
public static void registrySetLongValue(WinReg.HKEY root, String keyPath, String keyName, long keyValue) {
Advapi32Util.registrySetLongValue(root, keyPath, keyName, keyValue);
}
/**
*
* {@code Advapi32Util.registryDeleteKey(WinReg.HKEY_CURRENT_USER, "SOFTWARE\\StackOverflow");}
*/
public static void registryDeleteKey(WinReg.HKEY root, String keyPath) {
// Delete a key
Advapi32Util.registryDeleteKey(root, keyPath);
}
}
There is a System.getenv
method that helps to optain the value of the specified environment variable: 有一个
System.getenv
方法有助于获取指定环境变量的值:
System.getenv("JAVA_HOME");
System.getenv("CATALINA_HOME");
if a security manager allows access to the environment variable. 如果安全管理器允许访问环境变量。 Otherwise, a
SecurityException
will be thrown. 否则,将抛出
SecurityException
。
Tomcat home directory or Catalina directory is stored at the Java System Property environment. Tomcat主目录或Catalina目录存储在Java System Property环境中。 If the Java web application is deployed into Tomcat web server, we can get the Tomcat directory with the following command
如果将Java Web应用程序部署到Tomcat Web服务器中,我们可以使用以下命令获取Tomcat目录
System.out.println(System.getProperty("catalina.base")); System.out.println(System.getProperty("catalina.home")); //you can store it in string String caltelinaHome =System.getProperty("catalina.home");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.