Java没有识别环境变量

4
我正在尝试在Linux中设置环境变量。 我按照这里的说明操作:在Ubuntu中轻松更改$JAVA_HOME。尽管使用了“source /etc/environment”命令,并使用“echo MY_VAR”验证Linux是否检测到该变量,但我的java应用程序无法捕获它。 该变量仍然返回“null”。
public static void main(String[] args) throws IOException {
    System.out.print(System.getenv("MY_VAR"));

我正在通过sudo java -jar /path/to/my.jar来执行我的Java应用程序。

更新:我犯了错误,之前没有包括正确的命令。实际上,我是在使用sudo。


1
你能获取其他变量,比如JAVA_HOME吗? - Juned Ahsan
7
尝试打印System.getenv()。这将返回一个映射。展示它以查看您能够看到哪些变量。然后检查键是否与设置变量时指定的键相同。 - Pratik Shelar
@Pratik - 已完成,但我的环境变量根本没有显示出来。 - Ben
1
@Webnet 如果您以不同的用户身份运行Java程序,请参考此处:https://dev59.com/D2oy5IYBdhLWcg3wUcZL,了解如何传递环境变量。 - SubOptimal
2
你尝试过在sudo命令中使用-E标志吗? - FuriousGeorge
显示剩余4条评论
3个回答

4
你需要导出该变量。
export MY_VAR=stackoverflow
java -jar /path/to/my.jar

那么您可以使用以下代码打印值:
System.out.print(System.getenv("MY_VAR"));

编辑: 简短的示例脚本(如果需要,请修改路径)

#!/bin/sh

MY_VAR="foobaz not exported"
echo "MY_VAR: ${MY_VAR}"
java -jar my.jar

export MY_VAR="foobaz exported"
echo "MY_VAR: ${MY_VAR}"
java -jar my.jar

1
这样做,它仍然是null... :-\ - Ben
@Webnet,请查看添加的简短示例。如果仍然无法正常工作,您应该展示您所执行的步骤。 - SubOptimal

1

从链接的答案中...

在你想要更新变量的每个shell中执行“source /etc/environment”:

当您调用java -jar /path/to/my.jar时,我认为您将启动一个新的shell,这意味着./etc/environment的内容不会对运行您的Java代码的shell可用。

尝试一下

export MY_ENVIRONMENT="HELLO"
java -jar /path/to/my.jar

这样看起来好些了吗?

如果您正在使用sudo命令...

sudo -c export MY_ENVIRONMENT="HELLO";java -jar /path/to/my.jar

或者类似这样的东西。

在这种情况下它仍然是null - Ben

1
问题在于sudo运行时使用自己的环境变量。你可以将变量添加到根环境中(有时会出现问题),或明确告知sudo保持当前环境的变量。以下是后者的实现方法:
1. 打开bash配置文件:vim ~/.bash_profile 2. 将环境变量添加到文件中:export MY_VAR=80 3. 打开sudoers配置文件:sudo visudo 4. 添加如下一行内容到文件中,注意格式:Defaults env_keep +="MY_VAR"
现在,当你运行sudo java -jar /path/to/my.jar时,它应该像期望的那样工作,并将MY_VAR设置为80。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接