启动环境变量设置的mac eclipse

28 eclipse macos environment-variables

我的公司提供了一个基于eclipse的开发环境,它需要为底层工具链设置一些环境变量,因此可以同时安装多个版本而不接管系统.

我想在finder或dock中提供一个图标,然后设置这些图标然后启动eclipse,这样客户就不会在没有设置环境的情况下意外启动eclipse.这是我到目前为止所尝试的:

  1. 在Info.plist中为eclipse设置环境:

    这应该是一个很好的方法,但我不能使它添加到现有的路径(如export PATH =/myapp/bin:$ PATH).

  2. 包装eclipse的bash脚本:

    我创建了一个名为eclipse.command的bash脚本来设置环境然后启动eclipse.这将打开一个终端窗口以及eclipse图标,并允许人们为"日食""保持停靠".我不能把eclipse.command放在Dock上,因为它不是一个应用程序.

  3. Applescript包装eclipse.command:

    eclipse.command附近的Applescript包装使它看起来像一个应用程序,并阻止终端窗口出现.不幸的是,我现在得到了一个用于appcript的停靠图标和一个用于日食的停靠图标,所以仍然能够在码头上保持裸食.

有什么建议?我是以完全错误的方式解决这个问题吗?

sak*_*kra 46

有一个替代解决方案涉及在用户使用设置环境的shell包装器启动Eclipse应用程序时替换MacOS X运行的可执行文件.

在Eclipse应用程序包目录/Applications/eclipse/Eclipse.app/Contents/MacOS中创建一个名为"eclipse.sh"的空文本文件.

在文本编辑器中打开eclipse.sh,输入以下内容:

#!/bin/sh

export ENV_VAR1=value
export ENV_VAR2=value

logger "`dirname \"$0\"`/eclipse"

exec "`dirname \"$0\"`/eclipse" $@
Run Code Online (Sandbox Code Playgroud)

在示例中,ENV_VAR1和ENV_VAR2是正在设置的环境变量.从Eclipse中启动的进程可以看到这些变量.logger命令只是将eclipse可执行文件的路径记录到system.log作为调试帮助.

在终端中设置shell脚本eclipse.sh的可执行标志,即:

chmod +x /Applications/eclipse/Eclipse.app/Contents/MacOS/eclipse.sh
Run Code Online (Sandbox Code Playgroud)

打开Eclipse.app Info.plist并将密钥CFBundleExecutable的值从eclipse更改为eclipse.sh.

MacOS X不会自动检测到Eclipse.app的Info.plist已更改.因此,您需要使用lsregister命令强制更新终端中的LaunchService数据库:

/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -v -f /Applications/eclipse/Eclipse.app
Run Code Online (Sandbox Code Playgroud)

下次从Dock或Finder启动Eclipse.app时,应设置环境变量.

  • 只是最好的选择!非常感谢,完美无瑕!! (2认同)
  • 我不喜欢这个解决方案,因为除非他们在自己的机器上执行此操作,否则它不会使我的套件容易被参与项目的每个人使用.OSX没有可靠的方法将环境变量传递给已启动的应用程序,这绝对是荒谬的.我喜欢这个解决方案,因为它是唯一对我有用的东西. (2认同)

Chr*_*gly 7

我创建了以下内容:

别名start-eclipse ='open /Applications/eclipse/Eclipse.app'

如果从命令行运行start-eclipse,将拾取所有env变量.这样,您只需要在命令行和eclipse环境中维护一组env变量.


mou*_*iel 6

看一下相关问题:Mac OS X中的环境变量.

基本上,这涉及创建~/.MacOSX/environment.plist文件.

注销并登录environment.plist以获取.App的