【问题标题】:CLASSPATH set but java compiler cannot find class filesCLASSPATH 已设置但 java 编译器找不到类文件
【发布时间】:2012-01-18 17:18:40
【问题描述】:

我正在运行 Ubuntu 11.10 并已安装 jdk-6u30-linux-i586.bin 并有一个目录 /usr/local/jdk1.6.0_30 并且一切正常 只要我有,即使没有 CLASSPATH 也能很好地编译 在我的 ~/.bashrc 中导出 PATH=/usr/local/jdk1.6.0_30/bin:$PATH 并从一个全新的 shell 执行 java(不知道为什么不 我的环境中需要 CLASSPATH)。

现在我正在尝试使用以下类库: http://code.google.com/p/google-api-java-client/downloads/list google-api-java-client-1.6.0-beta.zip

我下载并解压了 zip 文件到 /usr/local/google 目录 它现在包含所有 jar 文件。然后我尝试编译 BigQuerySample 来自http://code.google.com/p/google-api-java-client/wiki/ClientLogin

$ javac -cp /usr/local/google BigQuerySample.java

我得到:

BigQuerySample.java:1:com.google.api.client.googleapis 包不存在 导入 com.google.api.client.googleapis.*;

除java.io.*之外的所有导入包,以此类推;

我知道这应该是一个简单的类路径问题,但调整了类路径 在命令行或环境中使用 export CLASSPATH=$CLASSPATH:/usr/local/google 没有摆脱错误。我已经为每个 jar 文件尝试了 jar -tvf *jar 东西在那里,为什么java编译器找不到包含?

谢谢,

约翰·戈奇

【问题讨论】:

    标签: java classpath


    【解决方案1】:

    您需要像这样将 jar 添加到您的类路径中:

    javac -cp "$CLASSPATH:/usr/local/google/google-api-client-1.6.0-beta.jar" BigQuerySample.java
    

    或使用wildcard 添加所有罐子:

    javac -cp "$CLASSPATH:/usr/local/google/*:/usr/local/google/dependencies/*" BigQuerySample.java
    

    【讨论】:

    • 谢谢,不幸的是,示例中的某些类没有在 jar 文件中定义,这意味着示例不好。我已经检查过: for i in *jar;做 /usr/local/jdk1.6.0_30/bin/jar -tvf $i >> out;完成但没有 GoogleTransport 类的踪迹。
    • ClientLogin API 是旧版。我相信你现在需要使用OAuth。看看你能不能找到一个更新的例子。
    【解决方案2】:

    你可以试试这个:

    javac -Djava.ext.dirs=/usr/local/google BigQuerySample.java
    

    【讨论】:

    • 嗨,就包含的投诉而言,这有效,但仍然有 Java 编译器无法找到的符号,例如 GoogleTransport、JSONCParser 等...
    • 我不确定您是否下载了所有需要的库。您可以检查是否所有库都在此目录下,包括 GoogleTransport 等。如果您要运行此应用,还需要设置选项:java -Djava.ext.dirs=...
    【解决方案3】:

    您必须明确指定所有引用 JAR。

    javac -cp /usr/local/google/file1.jar:/usr/local/google/file2.jar:. BigQuerySample.java
    

    运行时同样的事情......

    java -cp /usr/local/google/file1.jar:/usr/local/google/file2.jar:. BigQuerySample
    

    【讨论】:

      【解决方案4】:

      当在类路径中包含 jars 时,要么明确指出要包含的 jars,要么使用通配符来包含目录中的所有 jars。因此,对于您的示例,您可以使用:

      javac -cp /usr/local/google/google-api.jar BigQuerySample.java
      

      javac -cp /usr/local/google/* BigQuerySample.java
      

      有关在类路径中包含 jar 的更多帮助,请参阅post

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-11-17
        • 1970-01-01
        • 2017-07-03
        • 1970-01-01
        • 2016-03-08
        • 1970-01-01
        • 2011-01-09
        相关资源
        最近更新 更多