如何知道环境变量是否已成功设置(Mac)

时间:2016-04-20 13:32:58

标签: java variables unix environment

尝试将我的JAVA_HOME环境变量设置为JDK的位置。 ls -l 'which java'返回lrwxr-xr-x 1 root wheel 74 Nov 9 13:31 /usr/bin/java -> /System/.../java

所以我假设/System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java是我JDK的正确位置。所以我应该做的就是写export JAVA_HOME=$(/System/.../java)

这样做后,我得到了大量的输出:

Usage: java [-options] class [args...]
           (to execute a class)
   or  java [-options] -jar jarfile [args...]
           (to execute a jar file)
where options include:
    -d32      use a 32-bit data model if available
    -d64      use a 64-bit data model if available
    -server   to select the "server" VM
                  The default VM is server,
                  because you are running on a server-class machine.


    -cp <class search path of directories and zip/jar files>
    -classpath <class search path of directories and zip/jar files>
                  A : separated list of directories, JAR archives,
                  and ZIP archives to search for class files.
    -D<name>=<value>
                  set a system property
    -verbose:[class|gc|jni]
                  enable verbose output
    -version      print product version and exit
    -version:<value>
                  Warning: this feature is deprecated and will be removed
                  in a future release.
                  require the specified version to run
    -showversion  print product version and continue
    -jre-restrict-search | -no-jre-restrict-search
                  Warning: this feature is deprecated and will be removed
                  in a future release.
                  include/exclude user private JREs in the version search
    -? -help      print this help message
    -X            print help on non-standard options
    -ea[:<packagename>...|:<classname>]
    -enableassertions[:<packagename>...|:<classname>]
                  enable assertions with specified granularity
    -da[:<packagename>...|:<classname>]
    -disableassertions[:<packagename>...|:<classname>]
                  disable assertions with specified granularity
    -esa | -enablesystemassertions
                  enable system assertions
    -dsa | -disablesystemassertions
                  disable system assertions
    -agentlib:<libname>[=<options>]
                  load native agent library <libname>, e.g. -agentlib:hprof
                  see also, -agentlib:jdwp=help and -agentlib:hprof=help
    -agentpath:<pathname>[=<options>]
                  load native agent library by full pathname
    -javaagent:<jarpath>[=<options>]
                  load Java programming language agent, see java.lang.instrument
    -splash:<imagepath>
                  show splash screen with specified image
See http://www.oracle.com/technetwork/java/javase/documentation/index.html for more details.

对于java命令的使用,这看起来有些帮助。我的出口成功与否? JAVA_HOME现在是否设置为JDK的位置?

3 个答案:

答案 0 :(得分:0)

首先,要使此永久性,您必须编辑Mac中的~/.bash_profile文件。在该文件中,键入上面的导出命令。

要检查是否成功,请在终端类型echo $JAVA_HOME中查看输出。这将告诉您为$ JAVA_HOME设置当前环境变量的内容。

此外,which命令只查找java的可执行文件,而不是SDK的存储位置。您需要找到计算机上安装java的位置。对我来说,我的是:

export JAVA_HOME=$(/usr/libexec/java_home)

这将在安装新版本的Java时自动更新。

答案 1 :(得分:0)

要了解您的JAVA_HOME应该是什么,您应该能够从终端执行:

/usr/libexec/java_home

如果您已安装Oracle的Java并在系统首选项中安装了Java applet,则此应用程序将返回正确的路径以用作JAVA_HOME。

您可以使用返回的原始路径将此文件添加到.bash_profile文件中,或者您可以通过某些方法执行命令并将std-out响应分配给变量。 e.g。

export JAVA_HOME=$(/usr/libexec/java_home)

我的系统上有一些应用程序(UnrealEngine),它们查看原始环境,因此无法理解以这种方式设置的JAVA_HOME,因此我不得不对我的代码进行硬编码。

如果以上内容不适用,请注意JAVA_HOME必须指向不是java可执行文件,而不是指向包含java可执行文件的文件夹,而是指向一个文件夹,这样$JAVA_HOME/bin/java就是java的路径。如果您已正确设置,则可以执行

$JAVA_HOME/bin/java -version

查看您的java版本。

请注意,JAVA_HOME应该是默认java安装的基本文件夹的路径。

'/ usr / libexec / java_home'不是(或不应该)java安装的路径 - 甚至是符号链接 - 它是一个通过stdout返回的程序,stdout是配置的默认java安装的路径。

因此,您应该将其包装在反引号或$()中,因为这会导致bash执行括号的内容,并将其的stdout分配给JAVA_HOME。

至少,这是Oracle JDK在OSX上设置的方式。如果export JAVA_HOME=/usr/libexec/java_home有效,我不明白,除非该路径是符号链接,否则看起来不对。

答案 2 :(得分:0)

使用Yosemite,您可以通过属性列表或 plist 添加环境变量。     例如,〜/ Library / LaunchAgents / environment.plist:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
        <key>Label</key>
        <string>DGG.Environment</string>
        <key>ProgramArguments</key>
        <array>
            <string>sh</string>
            <string>-c</string>
            <string>
launchctl setenv JAVA_HOME $(/usr/libexec/java_home -v 1.8)
launchctl setenv M2_HOME /Users/dgg/JavaTools/apache-maven-3.3.9
launchctl setenv M2 /Users/dgg/JavaTools/apache-maven-3.3.9/bin
launchctl setenv MAVEN_OPTS "-Xms512m -Xmx1024m"
            </string>
        </array>
        <key>RunAtLoad</key>
        <true/>
    </dict>
    </plist>

更改plist文件后,从shell运行此命令以加载更改:

launchctl load ~/Library/LaunchAgents/environment.plist

请注意<string>标记中的多个值都正确执行但我无法使用此方法来修改$ PATH变量,所以我只是在我的.bash_profile中添加了$ JAVA_HOME / bin和$ M2的路径。我确信还有其他方法可以做到,但这很有效。
希望有所帮助,
DGG