使用-cp选项执行时无法加载类

时间:2014-04-15 07:23:20

标签: java jar classpath apache-pig

使用-cp选项执行时,Java无法找到类文件,如下所示

javac -cp ~/softwares/pig-0.12.0/pig-0.12.0.jar PR.java

编译成功。但是,当我运行上面生成的类时,我收到错误

java -cp ~/softwares/pig-0.12.0/pig-0.12.0.jar PR
 Error: Could not find or load main class PR

如果我删除-cp,我将收到低于预期的错误

 java PR
 Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/pig/PigServer
    at PR.runPigScript(PR.java:9)
    at PR.main(PR.java:21)
Caused by: java.lang.ClassNotFoundException: org.apache.pig.PigServer
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
    ... 2 more

请你告诉我可能是失败的原因是Step-2(无法找到或加载主类)。以下是PR.java的代码

  import org.apache.pig.ExecType;
  import org.apache.pig.PigServer;
  import org.apache.pig.backend.executionengine.ExecException;

 public class PR {

    public void runPigScript(){
            try {
                    PigServer  pigServer = new PigServer(ExecType.LOCAL);
                    pigServer.registerScript("RP.pig");
            } catch (Exception ex) {
                    // TODO Auto-generated catch block
                    ex.printStackTrace();
            }
    }

  public static void main(String[] args){
      PR pr = new PR();
     pr.runPigScript();
  }

}

来自https://wiki.apache.org/pig/EmbeddedPig

要运行程序,首先需要使用以下命令对其进行编译:

   javac -cp <path>pig.jar WordCount.java

如果编译成功,您可以运行程序:

   java -cp <path>pig.jar WordCount

1 个答案:

答案 0 :(得分:2)

尝试使用:

java -cp ~/softwares/pig-0.12.0/pig-0.12.0.jar;. PR

问题是您还需要加载已编译的PR类。因此,您的类路径需要具有依赖项和编译输出。将当前目录添加到类路径中。