java - 如何让 Java 应用程序在 Mac OS X 10.6.8 上读取 "system"环境变量(来自 Info.plist)?

标签 java macos environment-variables

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

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

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

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

如果我不使用 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>

最佳答案

而不是使用 JavaApplicationStub ,您可以指定 shell 脚本的名称作为 bundle 的可执行文件。您的程序应该可以通过System.getenv()访问那里定义的任何环境变量。 。例如,这是 <dict>来自 NetBeans Info.plist 的条目引用 shell 脚本 MacOS/netbeans :

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

关于java - 如何让 Java 应用程序在 Mac OS X 10.6.8 上读取 "system"环境变量(来自 Info.plist)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11254493/

相关文章:

java - Visual Studio Code Java JUnit 不输出到控制台

java - 使用java从domino获取rtf字段以获取JSON

objective-c - NSCollectionView 单元格顺序随 View 更改而更改

objective-c - Cocoa NSApp 在启动/用户登录后自动启动

angularjs - *** process.env.ENV未定义,假设env为 'prod'

java - Gson在json中存储对象类型

java - For 循环返回时不退出

java - 如何在 OSX 10.9.4 上安装 Eclipse

c++ - 在 Linux 中获取环境变量作为 UTF-8 字符串

java - 如何在 Spring 测试中设置环境变量或系统属性?