在使用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库的类路径的推荐方法是什么?
答案 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的名称。