[英]PDFBox with Maven - java.lang.NoClassDefFoundError
使用 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 庫的類路徑的推薦方法是什么?
我無法找到一個很好的解決方案,將 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.js
中的App
類中,並且您的包名稱是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 名稱。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.