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

o4tp2gmn  于 2021-06-21  发布在  Pig
关注(0)|答案(1)|浏览(324)

当使用-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

你能告诉我什么可能是失败的原因是第二步(找不到或加载主类)。下面是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
yzckvree

yzckvree1#

尝试使用:

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

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

相关问题