189 8069 5689

java代码设置env java代码设置jvm参数

Java中string user =env("");啥意思?

env应该是一个返回String类型的一个方法,返回的值赋值给user变量

成都创新互联是一家朝气蓬勃的网站建设公司。公司专注于为企业提供信息化建设解决方案。从事网站开发,网站制作,网站设计,网站模板,微信公众号开发,软件开发,微信小程序,10多年建站对混凝土泵车等多个方面,拥有丰富的网站制作经验。

初学者设置java环境变量

下面是我看到的一个比较不错的方法,至于自己手动设置的,到百度一搜大把。我就不转了。

看到很多初学者反复问这个问题,写了一个很简单的一个脚本,用于自动设置环境变量。把代码拷贝,另存为javaEnv.bat。安装完Java 2 SDK之后,开一个命令行窗口,输入javaEnv java2SDKDir(java2SDKDir是你的java的安装目录,不带路径最后的\。如果安装路径中有空格,请用javaEnv "java2SDKDir"格式)并运行。(注:一定要在javaEnv后边加上你的sdk的目录,setx的问题可以看这里)

@echo 你提供的jdk安装目录为:%1

@echo off

IF EXIST %1\bin\java.exe (

rem 如输入正确的 Java2SDK 安装目录,开始设置环境变量

@setx JAVA_HOME %1

@setx path %JAVA_HOME%\bin;%path%

@setx classpath %classpath%;.

@setx classpath %classpath%;%JAVA_HOME%\lib\tools.jar

@setx classpath %classpath%;%JAVA_HOME%\lib\dt.jar

@setx classpath %classpath%;%JAVA_HOME%\jre\lib\rt.jar

@echo on

@echo Java 2 SDK 环境参数设置完毕,正常退出。

) ELSE (

IF %1=="" (

rem 如没有提供安装目录,提示之后退出

@echo on

@echo 没有提供 Java2SDK 的安装目录,不做任何设置,现在退出环境变量设置。

) ELSE (

rem 如果提供非空的安装目录但没有bin\java.exe,则指定的目录为错误的目录

@echo on

@echo 非法的 Java2SDK 的安装目录,不做任何设置,现在退出环境变量设置。

)

)

请打开另外一个窗口测试

运行

path

set classpath

也可参考 这里进行设置。

如何在setenv.sh中java

Linux系统中安装Java步骤:

1.选择你所有安装的操作系统类型(Linux,Linux AMD64,Solaris等)。一旦已经选择下载文件──要么是自解压缩执行文件,要么是自解压缩的RPM文件,可以安装它。当前,最新的版本是5.0:

# mkdir -p /usr/local/java

# cd /usr/local/java

# mv /path/to/jre-1_5_0_05-linux-amd64.bin .

# chmod u+x jre-1_5_0_05-linux-amd64.bin

# ./jre-1_5_0_05-linux-amd64.bin

2.通过编辑/etc/profile将Java添加到默认的PATH设置:

PATH=$PATH:/usr/local/java/jre1.5.0_05/bin

JAVA_HOME=/usr/local/java/jre1.5.0_05

export $PATH $JAVA_HOME

Linux系统下Java环境变量的设置

在Linux/unix中设置环境变量

csh:在$HOME/.cshrc中添加一下行

setenv JAVA_HOME/usr/java/jdk1.6.0

setenv PATH $JAVA_HOME/bin:$PATH

setenv CLASSPATH .

bash/ksh中:

在$HOME/.bash_profile中添加以下行:

JAVA_HOME=/home/tarena/jdk1.6.0_05

CLASSPATH=.:..:$JAVA_HOME/jre/lib/rt.jar(java类所在的目录或jar文件,在虚拟机中加载类时,虚拟机在CLASSPAHT中找到它)

PATH=$JAVA_HOME/bin:$PATH (操作系统需要在PATH中找到它)

export JAVA_HOME CLASSPATH PATH

source .bash_profile 让全局环境变量.bash_profile生效

如何用Java程序改变系统环境变量

最近在做一个项目的时候,遇到一个要在java程序中改变linux的PATH环境变量的问题。我们知道在linux中PATH环境变量保存在用户根目录下的“.bashrc”和“.bash_profile这两个隐藏文件中。用户登录的过程中便会把这两个文件中的PATH路径记录的该用户的shell中。如果用户已经登录,这时可通过命令 export PATH=add_path:$PATH来增加一个路径为add_path的路径。但通过此种方式增加的PATH路径只在当前shell中有效(也就是说,当用户通过另一个shell登录时,PATH又变成了原来的值)。在windows中用户已经登录的情况下则是通过命令set来更改环境变量的。

Java语言是一门跨平台的语言,具有一次编写到处运行的特点。在java的1.0版本中有System.getenv(String key)可以来取得操作系统的环境变量,但由于getenv()具有与操作系统紧密相关的特性,这与java的跨平台的跟本特征相冲突,所以在java1.2中该方法被不推荐使用。而程序员在编程的过程中经常需要用到getenv(),所以在java1.5中getenv()又重新回来了。虽然可以通过getenv()来取得系统的环境变量,但是却没有与getenv()相对应的setenv()函数来改变系统的环境变量。

C语言是一门与平台相关的语言,在多年的发展中积累了数量相当可观的库函数,在stdlib.h函数库中就有getenv(参数省略)与setenv(参数省略)来获取和改变系统的环境变量,这就给我们一个提示:能不能在java语言中调用C语言的函数库?JNI(java本地接口)正给了我们这样一个选择。

1.首先生成ChangeEnv.java文件

/**

* @author sgh

* @version 1.0.0 06/07/21

*/

public class ChangeEnv {

/**

* @param args

*/

static {

try{

System.loadLibrary("change_env");//声明欲加载的动态链接库

}

catch(UnsatisfiedLinkError e ){

System.err.println("Can not load library "+e.toString());

}

}

public native void setEnv(String name ,String value, int replace);//声明一个本地调用接口

}

说明:

1. 动态链接库在windows中是.dll文件,在linux中则是.so文件,但在System.loadLibrary("change_env")中不需要把后缀写出 ,程序会自己判断。

2. 本地接口声明方式为在普通函数前加native关键字

2. 编译java文件 :Javac ChangeEnv.java

3. 使用命令 javah ChangeEnv 生成ChangeEnv.h文件(ChangeEnv.h文件由程序自动生成,程序员不需要作任何改动)

/* DO NOT EDIT THIS FILE - it is machine generated */

#include jni.h

/* Header for class ChangeEnv */

#ifndef _Included_ChangeEnv

#define _Included_ChangeEnv

#ifdef __cplusplus

extern "C" {

#endif

/*

* Class: ChangeEnv

* Method: setEnv

* Signature: (Ljava/lang/String;Ljava/lang/String;I)V

*/

JNIEXPORT void JNICALL Java_ChangeEnv_setEnv

(JNIEnv *, jobject, jstring, jstring, jint);

#ifdef __cplusplus

}

#endif

#endif

说明:

1.JNIEXPORT void JNICALL Java_ChangeEnv_setEnv

(JNIEnv *, jobject, jstring, jstring, jint)是本地接口函数的声明需要在.cpp文件中实现它

4.编写ChangeEnv.cpp

#include"ChangeEnv.h"

#includestdio.h

#includestdlib.h

//与ChangeEnv.h中函数声明相同

JNIEXPORT void JNICALL Java_ChangeEnv_setEnv(JNIEnv * env, jobject obj, jstring name, jstring value, jint replace)

{

////从instring字符串取得指向字符串UTF编码的指针

const char * name_char =(const char *) env-GetStringUTFChars(name ,JNI_FALSE);

const char * value_char =(const char *) env-GetStringUTFChars(value ,JNI_FALSE);

//实际调用的C库函数

setenv(name_char,value_char,replace);

//通知虚拟机本地代码不再需要通过name_char访问Java字符串,否则会

//造成内存泄露

env-ReleaseStringUTFChars(name,(const char *)name_char);

env-ReleaseStringUTFChars(value,(const char *)value_char);

return ;

}

5.编译ChangeEnv.cpp文件,生成libchange_env.so文件

gcc -I/home/disk4/sgh/sgh/jrockit/include -I/home/disk4/sgh/sgh/jrockit/include/linux -shared -o libchange_env.so ChangeEnv.cpp

说明:

1. Linux下链接库名称必须以lib开头,否则会无法识别

6. 编写测试程序test.java

import java.io.InputStreamReader;

import java.io.LineNumberReader;

public class test {

/**

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

System.out.println(System.getenv("PATH"));//打印改变之前的PATH路径

String pathPer = System.getProperty("java.library.path");

pathPer+=":.";

System.setProperty("java.library.path",pathPer);//把当前目录加到动态链接库路径中

ChangeEnv changePath = new ChangeEnv ();//生成一个ChangeEnv对象

changePath.setEnv("PATH","$PATH:/home/disk4/sgh/sgh/soft/slurm34/bin:/home/disk4/sgh/sgh/soft/slurm34/sbin",1);

System.out.println(System.getenv("PATH"));//打印改变之后的PATH路径

}

}

说明:

1. 可以看到PATH路径发生了变化

JNI在windows下的使用

既然所有的.h ,.cpp文件都已写好,我们不防顺便编译以下windows下的动态链接库.dll文件。

这时我们发现在windows下的vc环境中没有setenv(char * name ,char * value ,int replace),而只有putenv(char * key_value)函数,所以我们必须重写ChangeEnv.cpp,为了使ChangeEnv.class对外接口保持一致性,所以我们没有改写ChangeEnv.java中本地函数借口的声明。

1. 重写ChangeEnv.cpp函数

#include"ChangeEnv.h"

#includestdio.h

#includestdlib.h

#includestring.h

//与ChangeEnv.h中函数声明相同

JNIEXPORT void JNICALL Java_ChangeEnv_setEnv(JNIEnv * env, jobject obj, jstring name, jstring value, jint replace)

{

if(replace==0)//如果replace==0表示不发生置换,直接退出

return ;

////从instring字符串取得指向字符串UTF编码的指针

const char * name_char =(const char *) env-GetStringUTFChars(name ,JNI_FALSE);

const char * value_char =(const char *) env-GetStringUTFChars(value ,JNI_FALSE);

//实际调用的C库函数,把环境变量写成key=value格式

char * key_value=(char *)name_char;

strcat(key_value, "=");

strcat(key_value, value_char);

putenv(key_value);

//通知虚拟机本地代码不再需要通过name_char访问Java字符串,否则会

//造成内存泄露

env-ReleaseStringUTFChars(name,(const char *)name_char);

env-ReleaseStringUTFChars(value,(const char *)value_char);

return ;

}

2. 在vc6中新建一个动态链接库工程,添加ChangeEnv.h和ChangeEnv.cpp到该工程中去

3. 在“工具”----〉“选项-”----〉“目录”中添加java的include路径

C:\Program Files\Java\jdk1.5.0_06\include和C:\Program Files\Java\jdk1.5.0_06\include\win32

4. 单击“运行”,把生成的change_env.dll拷贝到ChangeEnv.java所在的工程目录中

5. 在ChangeEnv.java所在工程中新建一个测试程序test.java

import java.io.InputStreamReader;

import java.io.LineNumberReader;

public class test {

/**

* @param args

*/

public static void main(String[] args) {

ChangeEnv changePath = new ChangeEnv();

changePath.setEnv("PATH", "%PATH%;c:\\", 1);

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

}

}

转载


网站名称:java代码设置env java代码设置jvm参数
文章来源:http://cdxtjz.cn/article/docegji.html

其他资讯