【问题标题】:How can I get a Java app to read "system" environment variables (from Info.plist) on Mac OS X 10.6.8?如何让 Java 应用程序在 Mac OS X 10.6.8 上读取“系统”环境变量(来自 Info.plist)?
【发布时间】:2012-06-30 13:18:42
【问题描述】:

我们有一个当前在 Windows 上运行的 Java 应用程序,它需要配置信息才能在 Windows XP 和 Win 7 上正常工作。该配置信息是使用 Windows 系统变量(适用于应用程序的所有用户)定义的,而不是用户变量(适用于仅限当前运行应用程序的用户。)

我的工作是让它在 Mac (OS X 10.6.8) 上运行当我使用 JarBundler 为 Mac 构建应用程序时,我将这些变量的属性设置为正确的值,然后我看到它们出现了,正如预期的那样,在 app 文件夹的 Info.plist 文件中。根据我对可用文档的阅读,Info.plist 属性似乎应该适用于应用程序的所有用户,类似于 Windows 系统环境变量。

但是,当我使用 PackageMaker 创建包、安装它然后运行应用程序时,会返回 null 作为这些变量的值。我正在使用 Java 的最新更新——更新 9。(返回 null 被视为控制台窗口中数据字段中的 null 错误......并且应用程序挂起。)

我已验证 Info.plist 文件正在安装;它位于 app 文件夹中的预期位置,并且包含预期的数据。

如果我没有使用 info.plist,而是创建了文件 ~/.MacOSX/environment.plist,其中包含相同的变量(使用属性列表编辑器)并重新启动计算机,应用程序按预期运行,表明有效正在根据环境变量的请求返回数据。

因为目标是通过 PackageMaker 制作最终用户可安装的应用程序,而不需要用户为 environment.plist 创建隐藏文件夹,手动将文件移到那里,注销并重新登录,或重新启动计算机,之前能够运行应用程序,我更愿意使用 Info.plist 找到解决方案。

让 Java 应用程序正确读取 Info.plist 中的属性有什么技巧吗?是否需要在 JarBundler、PackageMaker 中或通过属性列表编辑器来完成这项工作?

或者这可能需要对 Java 代码进行一些修改? (我不知道具体用什么命令来读取环境变量数据。目前我没有访问源代码,虽然我可以访问它,如果需要回答这个问题。)

编辑:这是我的Info.plist 的片段:

<key>Properties</key> 
<dict> 
    ...
    <key>COMPENDIUM_DEVELOPER</key> 
    <string>true</string> 
    <key>CompendiumUserPath</key> 
    <string>/Applications/Compendium_CN</string> 
    <key>CompendiumSysPath</key> 
    <string>/Applications/Compendium_CN</string>
    ...
</dict>

【问题讨论】:

  • @Mark 有没有办法在这里附加文件?显然复制/粘贴文本会创建太大而无法放入评论字段的内容!这部分应该适合: PropertiesCOMPENDIUM_DEVELOPERtrueCompendiumUserPath/Applications/Compendium_CNCompendiumSysPath/Applications/Compendium_CN

标签: java macos environment-variables


【解决方案1】:

除了使用JavaApplicationStub,您还可以将shell 脚本的名称指定为捆绑包的可执行文件。您的程序应该可以通过System.getenv() 访问那里定义的任何环境变量。例如,这里是来自 NetBeans 的 Info.plist 中的 &lt;dict&gt; 条目,它引用了 shell 脚本 MacOS/netbeans

<key>CFBundleExecutable</key>
<string>netbeans</string>

【讨论】:

  • 谢谢。我会把它记下来作为一种可能的方法。任何想法为什么 Info.plist 无法从 Java 中按预期工作?
  • Shell 继承它们的环境变量; JavaApplicationStub 没有,除了从 environment.plist 得到的。
猜你喜欢
  • 1970-01-01
  • 2011-10-10
  • 2015-08-29
  • 2017-07-08
  • 2013-11-27
  • 2011-11-22
  • 2013-09-07
相关资源
最近更新 更多