【问题标题】:How to set environment variables to an application on OSX Mountain Lion?如何为 OSX Mountain Lion 上的应用程序设置环境变量?
【发布时间】:2012-08-23 07:44:31
【问题描述】:

自从升级到 OSX Mountain Lion 后,我在为 eclipse 和 maven 设置环境变量时遇到了一些问题。

我的目标是在 Eclipse 中运行一个 maven 命令。此命令需要从远程存储库下载人工制品(解决依赖关系)。存储库通过 HTTPS 进行身份验证。

我已经关注Guide to Remote repository access through authenticated HTTPS 并将以下行添加到我的 .bash_profil 中。如果我在终端运行 maven,一切正常。

export MAVEN_OPTS="-Xmx512m -Djavax.net.ssl.trustStore=/Users/myUser/.knowncerts/trust.jks -Djavax.net.ssl.trustStorePassword=trustPwd"

但这仅适用于终端,不适用于应用程序。在以前的 OSX 版本中,您必须将 MAVEN_OPTS 变量添加到

~/.MacOSX/environment.plist

(另请参阅Set environment variables on Mac OS X Lion)这对 OSX Lion 非常有效。

但 Apple 已经改变了 Mountain Lion 上的这种行为。我已经阅读了 environment.plist 不再受支持,新方法是编辑 .app 本身的 Info.plist (Where are system environment variables set in Mountain Lion?)。看来您必须添加一个包含所有变量的 LSEnvironment 字典。

<?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>LSEnvironment</key>
    <dict>
        <key>M2_HOME</key>
        <string>/usr/share/maven</string>
        <key>MAVEN_OPTS</key>
        <string>-Xmx512m -Djavax.net.ssl.trustStore=/Users/myUser/.knowncerts/trust.jks -Djavax.net.ssl.trustStorePassword=trustPwd</string>
    </dict>
    <key>CFBundleExecutable</key>
    <string>eclipse</string>
    <key>CFBundleGetInfoString</key>
    <string>Eclipse 3.8 for Mac OS X, Copyright IBM Corp. and others 2002, 2011. All rights reserved.</string>
    <key>CFBundleIconFile</key>
    <string>Eclipse.icns</string>
    <key>CFBundleIdentifier</key>
    <string>org.eclipse.eclipse</string>
    <key>CFBundleInfoDictionaryVersion</key>
    <string>6.0</string>
    <key>CFBundleName</key>
    <string>Eclipse</string>
    <key>CFBundlePackageType</key>
    <string>APPL</string>
    <key>CFBundleShortVersionString</key>
    <string>3.8</string>
    <key>CFBundleSignature</key>
    <string>????</string>
    <key>CFBundleVersion</key>
    <string>3.8</string>
    <key>CFBundleDevelopmentRegion</key>
    <string>English</string>
    <key>CFBundleLocalizations</key>
    <array>
        <string>ar</string>
        <string>cs</string>
        <string>da</string>
        <string>el</string>
        <string>en</string>
        <string>es</string>
        <string>de</string>
        <string>fi</string>
        <string>fr</string>
        <string>hu</string>
        <string>it</string>
        <string>iw</string>
        <string>ja</string>
        <string>ko</string>
        <string>nl</string>
        <string>no</string>
        <string>pl</string>
        <string>pt_BR</string>
        <string>pt</string>
        <string>ru</string>
        <string>sv</string>
        <string>tr</string>
        <string>zh_HK</string>
        <string>zh_TW</string>
        <string>zh</string>
    </array>
    <key>Eclipse</key>
    <array>
        <string>-keyring</string>
        <string>~/.eclipse_keyring</string>
        <string>-showlocation</string>
    </array>
</dict>
</plist>

如您所见,我更改了 Eclipse.app 的 Info.plist。但这没有用。我在 Eclipse 中启动 maven。但是 maven 无法下载工件,因为远程存储库不受信任。我认为 Eclipse 没有使用我在 Info.plist 中定义的环境变量

你对如何解决这个问题有什么建议吗?

感谢您的回答!

【问题讨论】:

    标签: java eclipse maven environment-variables osx-mountain-lion


    【解决方案1】:

    从这里:https://stackoverflow.com/a/10374886/325742

    #!/bin/sh
    #
    export MAVEN_OPTS=#MAVEN_OPTS_HERE#
    LAUNCHER_JAR=/Applications/eclipse/plugins/org.eclipse.equinox.launcher_1.2.0.v20110502.jar
    
    java \
    -showversion \
    -XX:MaxPermSize=256m \
    -Xms1024m \
    -Xmx1024m \
    -Xdock:icon=/Applications/eclipse/Eclipse.app/Contents/Resources/Eclipse.icns \
    -XstartOnFirstThread \
    -Dorg.eclipse.swt.internal.carbon.smallFonts \
    -Dosgi.requiredJavaVersion=1.5 \
    -jar $LAUNCHER_JAR
    

    然后,使用http://mathiasbynens.be/notes/shell-script-mac-apps 上的步骤,将上述脚本转换为可以保留在 Dock 上的应用程序。

    【讨论】:

    • 不幸的是,这并没有解决我的问题。当我使用脚本启动 Eclipse 时,它​​仍然不使用“MAVEN_OPTS”。但是如果我导出一个不同的“M2_HOME”,Eclipse 会使用这个新的 Maven-Home。
    【解决方案2】:

    你可以在eclipse中直接在maven“Debug Configurations”->“Environment”选项卡下设置env变量

    【讨论】:

      【解决方案3】:

      不幸的是,这似乎是在 OS X 10.8.x Mountain Lion 中设置全局环境变量的最佳选择:

      对于临时环境变量,在 Terminal.app 中运行此命令,并重新启动所有需要访问该变量的应用:

      launchctl setenv MYVARIABLE value
      

      要使环境变量在重新启动后保持不变,请创建 /etc/launchd.conf 并为每个变量添加这样的一行,然后重新启动整个系统:

      setenv MYVARIABLE value
      

      这对我来说可以设置一个全局环境变量,该变量可以由 OS X 10.8.2 上的 IntelliJ IDEA CE 12.0 继承。不是很优雅,但很有效。

      或者,您可以在 Terminal.app 中设置环境变量,然后从命令行启动要从中访问环境变量的应用程序。启动的应用程序将从您的终端会话继承环境。在 Terminal.app 中,设置环境变量并使用 open -a "App Name" 之类的命令启动另一个应用程序:

      export MYVARIABLE=value
      open -a "IntelliJ IDEA 12 CE"
      

      这会打开 IntelliJ IDEA,我的代码可以在其环境中访问 $MYVARIABLE

      【讨论】:

      【解决方案4】:

      终端窗口的命令步骤:

      1. vi ~/.bash_profile
      2. 按 i(使 vi 编辑器进入编辑模式)
      3. 在vi编辑器窗口输入环境变量
        • 例如export JAVA_HOME=/Users/Shared/Jenkins/Home/tools/hudson.model.JDK/java8
      4. esc 键后跟 :wq
      5. 来源 ~/.bash_profile

      【讨论】:

        猜你喜欢
        • 2012-08-18
        • 2012-10-29
        • 2012-09-28
        • 1970-01-01
        • 1970-01-01
        • 2014-09-29
        • 2021-05-27
        • 2019-10-11
        • 1970-01-01
        相关资源
        最近更新 更多