如何使Mac的NetBeans 15在Gradle构建中尊重系统环境变量



我最近开始使用GitHub Packages在内部分发我们的共享库,并已将Gradle构建配置更改为使用基于系统环境变量的凭据,而不是硬编码,例如

repositories {
mavenLocal() // only use when testing -SNAPSHOT locally
mavenCentral() // third-parties

maven { // our-library
name = "MyLibrary"
url = "https://maven.pkg.github.com/MyCompany/mylibrary"
credentials {
username = project.findProperty("git_username") ?: System.getenv("git_username")
password = project.findProperty("git_token") ?: System.getenv("git_token")
}
}
}

不幸的是,无论我改变了多少环境变量,无论是在~/.zshrc.zshenv.bash_profile/etc/launchd.conf中,构建都指示凭据被禁止,或者更准确地说被解析为null。

每次我更改配置时,我也会运行适当的source以确保它是活动的,我甚至会重新启动,以防万一。

环境变量将始终显示在终端中,确认环境变量始终正确设置,例如echo $git_usernameprintenv产生环境变量和期望的敏感令牌。

在一个同事的帮助下进行了大量的实验之后,我们确定从dock启动NetBeans 15没有帮助,所以我们还在~/.zshrc

中添加了以下行
alias netbeans="/Applications/NetBeans/Apache NetBeans 15.app/Contents/MacOS/netbeans &"

但是现在要启动NetBeans,我不能使用dock图标,而是手动启动终端,然后输入

netbeans
以下是~/.zshrc 新增的行
#
# RW - For GitHub Package access
#
export git_username=NotApplicableUsesToken
export git_token=redacted1
export git_publish_username=NotApplicableUsesToken
export git_publish_token=redacted2
#
# RW - So Netbeans launches and honours the environment variables above
#
alias netbeans="/Applications/NetBeans/Apache NetBeans 15.app/Contents/MacOS/netbeans &"

我的问题是,为什么NetBeans从dock启动时没有发现环境变量?我应该如何配置NetBeans来拾取环境变量,而不需要这种解决方案?

Aqua GUI不读取任何shell配置文件,例如.bash_profile,.bashrc,.login,.profile,.zprofile.zshrc。你开始关注launchd是正确的。不幸的是,/etc/launchd.conf不再被支持,文件无法读取。

Apple的运行时配置指南在环境变量部分中指出:

有两种方法可以使环境变量对应用程序可用。第一种方法是定义终端会话中的变量,然后从同一会话启动应用程序. ...

将环境变量与应用程序关联的第二种方法是在应用程序的信息属性列表文件. ... 中包含LSEnvironment键

编辑应用程序的列表似乎不是最好的主意,当应用程序更新时,您的更改可能会丢失。

还有第三种方法。

launchctlsetenvunsetenvgetenv三个子命令,用于管理环境变量。但是,环境变量不会跨launchd实例持久化。

似乎一个常见的方法是在~/Library/LaunchAgents中创建一个代理作业。plist,在用户登录到macOS时运行,它将执行launchctl setenv来设置应从dock启动的应用程序可用的环境变量。在"/etc/launch .conf设置系统范围的变量在10.10中不工作"中有讨论;和"GUI应用程序的环境变量";指向此方法的资源。您可能还想看到创建启动守护进程和代理。

我自己还没有测试或尝试过这种方法。

最新更新