试图在Ubuntu上编译/运行Java代码,错误:Java.lang.NoClassDefFoundError:org/apache/pdfbox/pdmodel/PDDocument

试图在Ubuntu上编译/运行Java代码,错误:Java.lang.NoClassDefFoundError:org/apache/pdfbox/pdmodel/PDDocument,java,ubuntu,pdfbox,Java,Ubuntu,Pdfbox,我试图在Ubuntu系统上运行以下Java代码。代码应使用pdfbox类创建一个空白PDF文件: import org.apache.pdfbox.pdmodel.*; import java.io.*; public class BlankPDF { public static void main(String[] args) { PDDocument doc = null; try{ doc = new PDDocument(

我试图在Ubuntu系统上运行以下Java代码。代码应使用pdfbox类创建一个空白PDF文件:

import org.apache.pdfbox.pdmodel.*;
import java.io.*;

public class BlankPDF {
    public static void main(String[] args) {
        PDDocument doc = null;
        try{
            doc = new PDDocument();
        } catch (IOException ie){
            System.out.println(ie);
        }
        doc.addPage(new PDPage());
        try{
            doc.save("Empty PDF.pdf");
            doc.close();
        } catch (Exception io){
            System.out.println(io);
        }
    }
}
我在与脚本相同的目录中有以下类依赖项:

sudo javac BlankPDF.java -classpath pdfbox-1.7.0.jar:fontbox-1.7.0.jar:jempbox-1.7.0.jar:commons-logging-1.1.1.jar
  • pdfbox-1.7.0.jar
  • jempbox-1.7.0.jar
  • fontbox-1.7.0.jar
  • commons-logging-1.1.1.jar
我使用以下命令编译脚本:

sudo javac BlankPDF.java -classpath pdfbox-1.7.0.jar:fontbox-1.7.0.jar:jempbox-1.7.0.jar:commons-logging-1.1.1.jar
它没有返回任何输出并创建了一个.class文件(表示编译工作正常?)

但当我尝试使用以下命令运行代码时:

sudo java BlankPDF -classpath pdfbox-1.7.0.jar:fontbox-1.7.0.jar:jempbox-1.7.0.jar:commons-logging-1.1.1.jar
我得到这个错误:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/pdfbox/pdmodel/PDDocument
    at BlankPDF.main(BlankPDF.java:15)
Caused by: java.lang.ClassNotFoundException: org.apache.pdfbox.pdmodel.PDDocument
    at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
    ... 1 more

我缺少什么?

类的名称必须是
java
的最后一个参数。旗帜必须在它前面。如果将标志放在命令行的末尾(如此处所示),它们将被忽略。因此:

java -classpath .:pdfbox-1.7.0.jar:fontbox-1.7.0.jar:jempbox-1.7.0.jar:commons-logging-1.1.1.jar BlankPDF

类的名称必须是
java
的最后一个参数。旗帜必须在它前面。如果将标志放在命令行的末尾(如此处所示),它们将被忽略。因此:

java -classpath .:pdfbox-1.7.0.jar:fontbox-1.7.0.jar:jempbox-1.7.0.jar:commons-logging-1.1.1.jar BlankPDF

参考上面的答案,不要忘记在类路径中添加当前目录(带点符号)以及JAR命令

java -classpath hello.jar:. SampleProgram

参考上面的答案,不要忘记在类路径中添加当前目录(带点符号)以及JAR命令

java -classpath hello.jar:. SampleProgram

+接得好,我没注意到这是他会遇到的第二个问题+接得好,我没注意到这是他会遇到的第二个问题!谢谢你的工作!在网上查找示例时,-classpath总是在开头,但我下意识地将它移到了结尾,就像我习惯使用传统的旗子一样谢谢你!在网上查找示例时,-classpath总是在开头,但我下意识地将它移到了结尾,就像我习惯使用传统标志一样