In Java API, there is the method System.getenv(), but no interface to set the env. This is because Java forbid the operation based on platform. But sometimes we need to change the env to finish some unit test. The following way just like a hack but it is ok to unit test:
private void setNewEnvironmentHack(Map<String, String> newenv) throws Exception
{
Class<?> processEnvironmentClass = Class.forName("java.lang.ProcessEnvironment");
Field theEnvironmentField = processEnvironmentClass.getDeclaredField("theEnvironment");
theEnvironmentField.setAccessible(true);
Map<String, String> env = (Map<String, String>) theEnvironmentField.get(null);
env.clear();
env.putAll(newenv);
Field theCaseInsensitiveEnvironmentField = processEnvironmentClass.getDeclaredField("theCaseInsensitiveEnvironment");
theCaseInsensitiveEnvironmentField.setAccessible(true);
Map<String, String> cienv = (Map<String, String>) theCaseInsensitiveEnvironmentField.get(null);
cienv.clear();
cienv.putAll(newenv);
}
The following implemented code comes from the stackoverflow, record it here in case we may need it again.
分享到:
相关推荐
javaEnv自动设置环境
Java-dotenv是一个开源项目,它的主要功能是从名为`.env`的文件中加载环境变量,使得在Java和Kotlin开发环境中可以方便地管理配置信息。这个项目受到了Ruby的dotenv库的启发,将Ruby中的功能移植到了Java和Kotlin...
JAVA-OPTS参数设置 JAVA-OPTS 是一个变量,用于设置 JVM 相关运行参数。JVM 是 Java Virtual Machine 的缩写,表示 Java 虚拟机。JAVA-OPTS 变量的设置对 Java 应用程序的性能和稳定性具有重要影响。 在设置 JAVA-...
### 编译时出现java.lang.OutOfMemoryError Java heap space异常 #### 一、问题概述 在进行Java项目编译的过程中,可能会遇到`java.lang.OutOfMemoryError: Java heap space`这种异常。这类异常通常表明Java虚拟机...
MethodID := GetMethodID(Env, JavaClass, MethodName, '(...Ljava/lang/String;)Ljava/lang/String;'); if MethodID = nil then Exit; // 调用Java方法 Result := CallStaticObjectMethod(Env, JavaClass, ...
例如,可能会有一个函数如`JNIEXPORT void JNICALL Java_com_example_MyClass_nativeMethod(JNIEnv *env, jobject obj)`,这个函数会在Java中被声明为`public native void nativeMethod();`,实现了C++与Java的对接...
4. **调用Java方法**:有了方法ID,就可以通过`env->CallObjectMethod`、`env->CallVoidMethod`等函数调用Java的构造方法或方法。 关于调用Java构造方法,你可以这样做: ```c++ jclass javaClass = env->FindClass...
jmethodID java_method = env->GetMethodID(java_class, "GetJavaString", "()Ljava/lang/String;"); if(java_method == 0) { return env->NewStringUTF("not find java method!"); } str = (jstring)env->...
JNIEXPORT void JNICALL Java_MyJavaClass_callFromC(JNIEnv *env, jobject obj) { // 调用Java方法 (*env)->CallVoidMethod(env, obj, methodID); } ``` 在这里,你需要获取`methodID`,它是Java方法的ID,...
最后,我们需要安装 JAVA 应用服务器,以便使用 Java 语言连接到 Active Directory 域控制器。 导出域根证书和计算机证书 在安装证书服务后,我们需要导出域根证书和计算机证书,以便使用 Java 语言连接到 Active ...
# included in the NDK. ${log-lib} ) ``` 现在我们开始编写C++代码。创建`native-lib.cpp`文件,这里我们将实现C++调用Java的方法。首先,我们需要声明Java方法的本地方法ID,然后使用JNIEnv接口调用Java方法: ...
JAVA中使用LDAP进行用户认证 JAVA中使用LDAP进行用户认证是指在JAVA应用程序中使用轻量级目录访问协议(LDAP)来进行用户身份验证。LDAP是一种基于X.500标准的目录访问协议,但它更简单、更灵活,可以根据需要进行...
`env`文件正是这样一个关键元素,它允许用户自定义CADENCE界面的快捷键,以提高设计流程的速度和效率。本文将深入探讨`env`文件的设置及其在CADENCE中的应用。 一、env文件介绍 `env`文件是CADENCE环境下的一种配置...
在QT开发Android应用程序时,有时候我们需要利用Java代码来执行Android平台特有的功能,比如访问系统服务、权限管理等。本文将详细讲解如何在QT项目中调用JAVA文件,以实现与Android原生系统的交互。 首先,我们...
Java 对 LDAP 的增删改查 Java 语言通过 JNDI(Java Naming and Directory Interface)提供了对 LDAP(Lightweight Directory Access Protocol)的支持,允许开发者通过 Java 语言来操作 LDAP 服务器。LDAP 是一种...
JNIEXPORT void JNICALL Java_com_example_MyClass_doSomething(JNIEnv *env, jobject obj) { // 在这里实现C++的逻辑 } } ``` 然后,通过`javah`工具生成C++的头文件,该文件包含了Java方法到C++函数的映射。这...
3. **找到Java类和方法**:在JNI函数中,使用`env`指针来查找并调用Java方法。例如,要调用Java类`com.example.MyActivity`中的静态方法`sayHello`,可以这样做: ```c jclass cls = env->FindClass(...
"env快捷键(中文说明).env"和"env快捷键.env"这两个文件都是用于存储快捷键设置的ENV文件。其中,“env快捷键(中文说明).env”可能包含中文注释,方便不熟悉英文的用户理解各个快捷键的功能。这些文件通常包含了...
MBeanServerConnection server = JMXConnectorFactory.connect(new JMXServiceURL(url), env); ``` 7. **客户端连接并操作MBeans**:客户端使用`JMXConnector`连接到服务器,并通过`MBeanServerConnection`对象操作...