java环境变量需要在系统中做哪些设置(linux配置java环境变量)

1.为什么要说这个问题?想起来两年前刚学习Java时,被要求先要设置环境变量,自然不解,随后网上找答案。现在想来感觉当时看到的答案都是神神叨叨,含糊不清,没有几个说的明明白白的。当然也有可能是当时的我没看明白吧…总之,相信我,看了我的博客,你不用再找别的地方了!2.环境变量环境变量就是英文直译:EnvironmentVariable。变量知道吧?对,就是可以随意给其赋值的一个存储单

大家好,又见面了,我是你们的朋友全栈君。

1. 为什么要说这个问题?

想起来两年前刚学习Java时,所有教程第一步都是要求先要设置环境变量。自然不解这是个什么东西,随后网上找答案。

现在想来感觉当时看到的答案都是神神叨叨、含糊不清,根本没有人把问题说明白!使得你「知其然而不知所以然」。当然也有可能是当时的我没看明白吧……

现在,相信我!看了我的博客,你不用再找别的地方了!

2. 什么是环境变量?

环境变量 就是英文直译:Environment Variable

  1. 变量 知道吧?

    对,就是可以随意给其赋值的一个存储单元。

  2. 那么环境 呢?

    首先,你把操作系统当做是一个最大的软件,其它软件如Office、JVM、LOL等等都是运行在这个软件之内的小软件。那么,相对于这些小软件来说,它们所处的「环境」就是操作系统这个软件。

  3. 最后,合起来就是“环境中的变量”

    「环境变量」就是操作系统这个软件中的变量,即:操作系统提供给你的全局变量

  4. 环境变量有什么作用呢?

    环境变量没什么特别的,变量在任何程序中的作用都是“被赋值/被取值”!这个全局变量操作系统可以使用,其内的小软件也可以使用!

3. 环境变量长啥样?有哪些?

变量长啥样,环境变量就长啥样……

XXX = XXX

  1. 在Windows中

    下面是WIN10。Windows是视窗系统,我们不必显式的使用XXX=XXX这种方式,因为系统给我提供了窗口,可以直观的看到并编辑。如下图:

    这里写图片描述

  2. 在Linux中

    设置:

    /etc/profile 文件中设置,export 的意思就是将局部变量设置为环境变量。现有的变量是被这样一行代码设置的:

    export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL 

    这几个环境变量已经有一些默认值了,不过我们可以追加内容,比如修改PATH

    
    # : 的意思是并列
    
    PATH = /abc/def:$PATH

    查看:

    查看全部,使用env命令即可。

    查看单个,可以使用echo:如echo $JAVA_HOME


4. 在Java中

我们终于知道了环境变量是什么以及它的作用了。那么,具体在Java中会用到哪些呢?它们的作用又是什么呢?

有一点需要首先了解:环境变量大体上是给操作系统的直接上层程序用的。比如Linux中的shell.sh文件;Windows中的cmd.bat文件。

常见的Java相关环境变量及其作用

  1. PATH

    PATH是操作系统用的,用来指定操作系统需要使用到的可执行程序的位置。对于Java来说,通常需要把JDK的bin目录添加进入PATH中,这样你就可以在任意目录下使用bin下面的可执行程序,如javac.exejava.exe等。

    这个变量一定要保证将JRE/JDK的bin纳入其中(这里我说的其实不严谨,你可以把javaw.exe等这类文件复制一份放到任意一个PATH路径下,不一定是JRE/JDK也行),这样很多Java程序才能启动,比如Eclipse

  2. JAVA_HOME

    JAVA_HOME是一个约定,通常它指的是JDK的目录。如果需要JDK的话,大部分程序会默认去环境变量中取JAVA_HOME这个变量。

    例如,Tomcat的.bat/.sh文件中就会默认去取JAVA_HOME来用。

    所以,这个变量最需要设置。设置它,可保你万无一失,一生平安……

  3. JRE_HOME

    同样,这也是一个约定的变量,通常指JRE目录。其实大部分Java程序不需要JDK,而是只需要其子集JRE,所以很多程序也会去取这个变量来用。

    例如,Tomcat中某些.bat文件中这样说到:

    rem   JAVA_HOME       Must point at your Java Development Kit installation.
    rem                   Using JRE_HOME instead works as well.
    rem
    rem   JRE_HOME        Must point at your Java Runtime installation.
    rem                   Defaults to JAVA_HOME if empty. If JRE_HOME and JAVA_HOME
    rem                   are both set, JRE_HOME is used.

    大意是说:Tomcat去取这俩变量,只要任意一个不为空就行,都不为空就用JRE_HOME了。因为Tomcat不需要JDK中的工具,它只是运行Java程序而已。

    这个变量如果你明确知道应用程序只需要设置这个就行(比如上面Tomcat的注释),那么它可以代替JAVA_HOME,且最好就用这个。

  4. CLASSPATH

    CLASSPATH是约定的一个可以设置我们自己的.class, jar文件所在目录的变量。不过某个Java程序可以自己决定取与不取这个变量。Tomcat 在某些情况下会去取,你自己的Java程序你不设置就会忽略它的。

    这和Java可执行程序:java.exe的可选配置-cp/-classpath不是一个东西,仅是用意相似:

    java [-options] class [args...]
           (执行类)
    或  java [-options] -jar jarfile [args...]
           (执行 jar 文件)
    其中选项包括:
    -cp <目录和 zip/jar 文件的类搜索路径> -classpath <目录和 zip/jar 文件的类搜索路径>               用 : 分隔的目录, JAR 档案
                  和 ZIP 档案列表, 用于搜索类文件。

    结论:基本上,你不需要它。

  5. CATALINA_HOME

    这是Tomcat用的。叫CATALINA这个名字我估计是因为Tomcat默认服务(也就<Service></Service>标签)的名字就是CATALINA。当然,是不是其实不重要,毕竟变量的名字可以随意起(但最好见名知意),重要的是它存什么值。它的值代表当前tomat根目录,比如:E:\apache-tomcat-7.0.55

    这个变量,仅当你移动了.bat/.sh等用来启动Tomcat的文件(就是不在原来的tomcat\bin下面了)时才需要指定。比如,在Linux中你将catalina.sh复制到/etc/rc.d/init.d/下做自启动服务时就需要设置一下。

Java代码中也有API能获取环境变量:

  • 获取并打印

    // 打印单个环境变量
    final String env = System.getenv("PATH");
    System.out.println(env);
    
    // 打印所有环境变量
    final Map<String, String> envMap = System.getenv();
    for (Map.Entry<String, String> env : envMap.entrySet()) {
        System.out.println(env.getKey() + "=" + env.getValue());
    }

总结

最后我们总结一下:

  1. 需要在操作系统下设置的变量:

    1. PATH中包含JRE/JDK的bin目录。

    2. JAVA_HOME或者JRE_HOME。都设也可以,偷懒就只设 JAVA_HOME就可以。

  2. 很少需要设置的:

    CLASSPATHCATALINA_HOME


转载注明出处:http://blog.csdn.net/u010297957/article/details/51334951

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/128329.html原文链接:https://javaforall.net

(0)
上一篇 2022年4月11日 下午4:20
下一篇 2022年4月11日 下午4:20


相关推荐

  • 中国程序员和外国程序员哪个厉害_中国十大程序员

    中国程序员和外国程序员哪个厉害_中国十大程序员作者:金戈大王别被标题误导,我可没有说中国程序员不如外国程序员。听说世界一流程序员都上一个论坛,叫stackoverflow,那天闲来无事,索性上去看看。不得了,发现一个热门问题stackoverflow中的一个提问乖乖,这哥们难道没学过编程,返回值跟声明不一样他都看不出来?看来stackoverflow的程序员水平不过如此啊,哈哈哈哈。一阵

    2022年10月11日
    6
  • 已解决:conda常见报错以及解决方法【持续更新conda的其它报错以及解决方法。】

    已解决:conda常见报错以及解决方法【持续更新conda的其它报错以及解决方法。】今晚使用 conda 创建虚拟环境失败 报错如下 Collectingpa current repodata json failedCondaH HTTP000CONNE

    2026年3月18日
    2
  • python-PyPDF2

    python-PyPDF2作用:处理PDF文档提取文本,旋转页面,叠加页面1.pdfFileObj=open(‘meetingminutes.pdf’,’rb’)#打开pdf文档2.pdfReader=PyPDF2.PdfFileReader(pdfFileObj)#获取pdf文档数据3.pdfReader.numPages#获取页数4.pageObj=pdfReader.getPage(0)#获取指定页码的内…

    2022年6月23日
    35
  • httprunner(3)用脚手架快速搭建项目[通俗易懂]

    httprunner(3)用脚手架快速搭建项目[通俗易懂]前言如何快速搭建一个httprunner项目呢?我们可以使用脚手架,脚手架就是自动地创建一些目录,形成一个项目的架构,不需要我们再手动的去创建查看创建新项目的命令先来查看一下帮助命令httpr

    2022年7月31日
    6
  • 多线程锁有几种类型_进程同步和互斥概念

    多线程锁有几种类型_进程同步和互斥概念一、同步与互斥的概念  现代操作系统基本都是多任务操作系统,即同时有大量可调度实体在运行。在多任务操作系统中,同时运行的多个任务可能:都需要访问/使用同一种资源;多个任务之间有依赖关系,某个任务的运行依赖于另一个任务。【同步】:  是指散步在不同任务之间的若干程序片断,它们的运行必须严格按照规定的某种先后次序来运行,这种先后次序依赖于要完成的特定的任务。最基本的场景就是:两个或两个以…

    2022年8月12日
    11
  • 类加载器的双亲委派模型_java mock 模拟接口

    类加载器的双亲委派模型_java mock 模拟接口JVM类加载器JVM主要有以下几种类加载器:引导类加载器主要加载JVM运行核心类库,位于JRE的lib目录下,如rt.jar中的类。扩展类加载器主要加载JVM中扩展类,位于JRE的ext目录下。应用程序类加载器主要负责加载ClassPath路径下的类,也就是业务类。自定义加载器负责加载用户自定义路径下的类。类加载器关系…

    2022年8月11日
    8

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号