带Maven的PDFBox-java.lang.NoClassDefFoundError

时间:2019-03-24 06:52:08

标签: java maven pdfbox

在使用Maven安装PDFBox时,它将库放在~/.m2/repository目录中。

我的程序符合mvn package的要求。

当我尝试使用它运行时

java -cp target/java-project-1.0-SNAPSHOT.jar com.example.sub.App

然后我得到

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/pdfbox/pdmodel/PDDocument

我还应该在~/.m2/repository中将库指定为类路径的一部分吗?这样做似乎有点乏味。建议在使用Maven的库位置时指定PDFBox库的类路径的推荐方法是什么?

1 个答案:

答案 0 :(得分:1)

通过将JAR文件保留在〜/ .m2中,我找不到一个很好的解决方案,因此以下答案是基于其他答案的解决方法。不过,对于那些像我这样既不熟悉PDFBox又不熟悉Maven的人,我将提供更多说明。

1)将以下内容添加到pom.xml文件中。如果您已经有<build><plugins>部分,则只需在其下面添加<plugin>部分。否则,您可能需要在<project>元素内添加以下完整代码:

  <build>
      <plugins>
          <plugin>
              <artifactId>maven-assembly-plugin</artifactId>
              <configuration>
                  <archive>
                      <manifest>
                          <addClasspath>true</addClasspath>
                          <mainClass>**REPLACE THIS WITH THE FULL URI OF YOUR MAIN CLASS**</mainClass>
                      </manifest>
                  </archive>
                  <descriptorRefs>
                      <descriptorRef>jar-with-dependencies</descriptorRef>
                  </descriptorRefs>
              </configuration>
              <executions>
                  <execution>
                      <id>make-my-jar-with-dependencies</id>
                      <phase>package</phase>
                      <goals>
                          <goal>single</goal>
                      </goals>
                  </execution>
              </executions>
          </plugin>
      </plugins>
  </build>

2)确保替换<mainClass>元素中的文本以匹配情况。例如,如果您的main()方法位于App中的App.js类中,并且您的包名称为com.example.sub。然后上述元素应显示为:

<mainClass>com.example.sub.App</mainClass>

3)要编译您的应用,请运行mvn package

注意:我已经看到一些使用mvn clean compile assembly:single而不是mvn package的在线参考。我不确定mvn package似乎对我来说还不错。

这将带走您的项目和所有依赖关系,并在目标目录中创建一个名为以下内​​容的JAR文件:

java-project-1.0-SNAPSHOT-jar-with-dependencies.jar

4)要运行项目,您可以执行以下操作:

java -cp target/java-project-1.0-SNAPSHOT-jar-with-dependencies.jar com.example.sub.App

请确保根据情况修改以上行。换句话说,您可能需要同时更改jar文件的名称和主类URI的名称。