【问题标题】:Compiling jar files results in ClassNotFoundException编译 jar 文件导致 ClassNotFoundException
【发布时间】:2021-11-16 15:33:33
【问题描述】:

我正在尝试运行一个简单的 java 程序。

├── README.md
├── bin
│   └── myapp
│       └── myapp.class
├── build-jar
├── lib
│   ├── pdfbox-app-2.0.24.jar
├── manifest.txt
├── myapp.jar
└── src
    └── myapp
        └── myapp.java

然后我编译了我的 java 类

javac -cp src/ src/myapp/*.java -d bin
javac -cp lib/pdfbox-app-2.0.24.jar src/myapp/*.java -d bin
jar -cvfm myapp.jar manifest.txt -C bin/ . src

但是当我运行我的 java 文件时

java -jar myapp.jar

我收到一个异常,说找不到我的班级。但是,我在做 javac 时已经包含了它。所以我有点好奇出了什么问题?我正在使用 VS 代码。

Caused by: java.lang.ClassNotFoundException: org.apache.pdfbox.pdmodel.PDDocument
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
        at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)

但是,当我运行 java 类时,它可以正常工作。我的代码附在此处

package myapp;
import java.io.File;
import java.io.IOException;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.text.PDFTextStripper;
import org.apache.pdfbox.text.PDFTextStripperByArea;

public class myapp {

    public static String read_file(String fileName) throws IOException{
        String pdfFileInText ="";
        try (PDDocument document = PDDocument.load(new File(fileName))) {

            document.getClass();

            if (!document.isEncrypted()) {
            
                PDFTextStripperByArea stripper = new PDFTextStripperByArea();
                stripper.setSortByPosition(true);

                PDFTextStripper tStripper = new PDFTextStripper();

                pdfFileInText = tStripper.getText(document);
                //System.out.println("Text:" + st);

                // split by whitespace
                String lines[] = pdfFileInText.split("\\r?\\n");
                for (String line : lines) {
                    //System.out.println(line);
                }

            }

        } catch (Exception e){
            System.out.println("Error");
        }

        return pdfFileInText;
        
    }
    public static void main(String[] args) throws Exception {
        String return_text = read_file("xxx.pdf");
        System.out.println(return_text);
        System.out.println("Hello, Test!");

    }
}

【问题讨论】:

    标签: java jar


    【解决方案1】:

    编译时必须包含库。通常代码编辑器或 IDE 会自动执行此操作。老实说,我不确定您为什么要编译两次。但是从终端/cmd你必须手动包含它:

    javac -cp ".:path/to/lib/pdfbox-app-2.0.24.jar;" myapp.java
    

    SN:只是指出 Java 约定通常需要 CamelCase 类名。

    【讨论】:

    • 我做到了。 javac -cp "/xxxxx/github/java/lib/pdfbox-app-2.0.24.jar;" src/myapp/*.java -d bin 得到 src/myapp/myapp.java:4: error: package org.apache.pdfbox.pdmodel 不存在
    • 是 /xxxxx/ 该路径的绝对第一个文件夹吗?也不要忘记 .:
    • 是的,我做到了。:/Users/john/Documents/github/sampleproject/lib/pdfbox-app-2.0.24.jar;
    猜你喜欢
    • 2013-08-11
    • 2019-12-12
    • 2020-08-22
    • 2016-09-30
    • 1970-01-01
    • 1970-01-01
    • 2014-11-26
    • 1970-01-01
    • 2019-12-03
    相关资源
    最近更新 更多