使用PDFBox并使用Maven构建时发生NoClassDefFoundError

时间:2018-08-28 19:29:15

标签: java maven pdfbox

问候,

我目前正在尝试阅读pdf文档的文本。 在尝试了超过15种不同的解决方案之后,代码仍然 当我使用命令“ java -jar pdfx.jar”运行它时,抛出此错误:

 Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/pdfbox/pdmodel/PDDocument
        at com.test.pdf.Main.main(Main.java:17)
  Caused by: java.lang.ClassNotFoundException:   org.apache.pdfbox.pdmodel.PDDocument
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        ... 1 more

Main.java

package com.test.pdf;

import java.io.*;

import org.apache.pdfbox.pdmodel.*;
import org.apache.pdfbox.text.PDFTextStripper;


public class Main {

     public static void main(String[] args){
     PDDocument pd;
     BufferedWriter wr;
     try {
            File input = new File("C:/Users/Test/Desktop/check.pdf");
            File output = new File("C:/Users/Test/Desktop/Ergebnis.txt");
            pd = PDDocument.load(input);
            System.out.println(pd.getNumberOfPages());
            System.out.println(pd.isEncrypted());
            pd.save("Copy.pdf"); 
            PDFTextStripper stripper = new PDFTextStripper();
            stripper.setStartPage(1); 
            stripper.setEndPage(1);
            wr = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(output)));
            stripper.writeText(pd, wr);
            if (pd != null) {
                pd.close();
            }
            wr.close();
     } catch (Exception e){
             e.printStackTrace();
            }
         }  

}

还有pom

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>PDFReader</groupId>
  <artifactId>PDFReader</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <build>
    <sourceDirectory>src</sourceDirectory>
    <plugins>
      <plugin>
        <artifactId>maven-jar-plugin</artifactId>
        <version>2.4</version>
        <configuration>
          <source>1.8</source>
          <target>1.8</target>
          <archive>
            <manifest>
              <mainClass>com.test.pdf.Main</mainClass>
            </manifest>          
          </archive>
        </configuration>
      </plugin>
    </plugins>
  </build>
  <dependencies>  
    <!-- https://mvnrepository.com/artifact/commons-logging/commons-logging -->
    <dependency>
        <groupId>commons-logging</groupId>
        <artifactId>commons-logging</artifactId>
        <version>1.2</version>
    </dependency>
    <dependency> 
      <groupId>org.apache.pdfbox</groupId> 
      <artifactId>pdfbox</artifactId> 
      <version>2.0.11</version> 
    </dependency> 
  </dependencies> 
</project>

PdfBox和common-logging的jar已添加到类路径中。 生成正常运行,没有错误。 pdf文件位于我的桌面上,我在构建后将jar移到该容器上,并使用cmd运行它。

2 个答案:

答案 0 :(得分:2)

将此插件放入pom并执行 java -jar PDFReader-0.0.1-SNAPSHOT-jar-with-dependencies.jar

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-assembly-plugin</artifactId>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>single</goal>
                    </goals>
                    <configuration>
                        <archive>
                            <manifest>
                                <mainClass>
                                    com.test.pdf.Main
                                </mainClass>
                            </manifest>
                        </archive>
                        <descriptorRefs>
                            <descriptorRef>jar-with-dependencies</descriptorRef>
                        </descriptorRefs>
                    </configuration>
                </execution>
            </executions>
        </plugin>

答案 1 :(得分:0)

我认为您需要在POM中进行实际的日志记录实现,例如log4j或任何更新的实现。