【问题标题】:Java Classpath Problems in UbuntuUbuntu 中的 Java 类路径问题
【发布时间】:2011-02-20 17:07:03
【问题描述】:

首先我运行的是 Ubuntu 9.10

我已将 /etc/environment 文件编辑为如下所示:

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"
JAVA_HOME="/usr/lib/jvm/java-6-sun-1.6.0.20"
CLASSPATH="/home/travis/freetts/lib/freetts.jar:/home/travis/freetts/lib/jsapi.jar:."

然后我运行“source /etc/environment”以确保包含更改。 然后我尝试使用以下代码编译我的简单测试程序:

javac Test.java

它会抛出一些错误,但是当我这样编译时:

javac -cp /home/travis/freetts/lib/freetts.jar:/home/travis/freetts/lib/jsapi.jar:.测试.java

它工作得很好,这让我相信由于某种原因 javac 没有看到 CLASSPATH 环境变量?我可以在终端中回显它和所有内容:

echo $CLASSPATH 给出了我输入的内容。

对此的任何帮助将不胜感激。

【问题讨论】:

  • java -version 的输出是什么?您还可以运行 update-java-alternatives -l 并发布输出您可以包含您收到的错误消息吗?
  • 运行 java 而不是 javac 会发生什么?
  • 我没有编译的类来运行 java ... Test.java 文件只是一些简单的代码。只是按预期抛出错误。
  • 我猜 spong 是对的,不知何故需要导出环境变量以便 javac 看到它们。

标签: java linux ubuntu classpath environment-variables


【解决方案1】:

如果将export 放入/etc/environment 是否有效?

export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"
export JAVA_HOME="/usr/lib/jvm/java-6-sun-1.6.0.20"
export CLASSPATH="/home/travis/freetts/lib/freetts.jar:/home/travis/freetts/lib/jsapi.jar:."

我猜CLASSPATH 在你获取脚本之前没有设置,所以你只是设置了一个局部变量。


以下是可能发生的情况的说明:

superman@metro:~$ Z=foo        # Only sets for this shell
superman@metro:~$ echo $Z
foo
superman@metro:~$ /bin/bash
superman@metro:~$ echo $Z      # Not set in sub-processes

superman@metro:~$ exit
exit
superman@metro:~$ export Z     # When exported, is part of environment
superman@metro:~$ /bin/bash
superman@metro:~$ echo $Z      # And now visible to sub-processes
foo
superman@metro:~$ exit
exit
superman@metro:~$ help export
export: export [-nf] [name[=value] ...] or export -p
     NAMEs are marked for automatic export to the environment of
    subsequently executed commands.  If the -f option is given,
    the NAMEs refer to functions.  If no NAMEs are given, or if '-p'
    is given, a list of all names that are exported in this shell is
    printed.  An argument of '-n' says to remove the export property
    from subsequent NAMEs.  An argument of '--' disables further option
    processing.

【讨论】:

  • 感谢您在 bash 变量作用域方面非常需要的一课!
  • 设置系统范围的CLASSPATH 不是一个好主意 - 这些 JAR 将包含在您在系统上运行的任何 Java 应用程序中。
  • @blacksensei 将-cp-classpath 选项与javajavac 命令一起使用。
【解决方案2】:

您是否导出了配置文件中的所有环境变量?我没有在你指定的文件中看到任何导出命令......使用导出并尝试一次......

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 2010-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多