簡體   English   中英

帶有 Maven 的 PDFBox - java.lang.NoClassDefFoundError

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM