从一个 jar 文件访问另一个 jar 文件时出现问题
Problem accessing one jar file from another
我编写了一个 Java 程序,它使用来自 Apache PDFBox jar 应用程序的 类。我在目录中有编译的 类 和 PDFBox jar 文件。我可以 运行 成功:
java -cp .;pdfbox-app.jar Athena NPCGenerator -pdf
但是,当我启动自己的程序并尝试以类似方式在同一个地方 运行 时,失败了:
java -cp .;pdfbox-app.jar -jar Athena.jar NPCGenerator -pdf
错误信息:
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/pdfbox/pdm
odel/PDDocument
at CharacterPDF.writePDF(CharacterPDF.java:49)
at NPCGenerator.printToPDF(NPCGenerator.java:302)
at NPCGenerator.makeAllNPCs(NPCGenerator.java:278)
at NPCGenerator.main(NPCGenerator.java:316)
at Athena.runApp(Athena.java:88)
at Athena.main(Athena.java:104)
Caused by: java.lang.ClassNotFoundException: org.apache.pdfbox.pdmodel.PDDocumen
t
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)
... 6 more
我需要做什么来解决这个问题?
如果您使用 -jar 标志 java 它需要一个可执行的 jar。然后它将忽略命令行上的 class 路径并从 jars 清单中读取 class 路径。
您可以将 pdfbox-app.jar 与 main-class 属性一起添加到 Athena.jar 中的清单中。您甚至可以在清单中指定 jar 的相对或绝对路径。
Main-Class: Athena
Class-Path: pdfbox-app.jar
或者您不能使用 -jar 并通过命令行将 Athena.jar 添加到您的 class 路径。在这种情况下,您还需要在命令行上指定主要 class,因为在这种情况下 java 不会读取清单。
java -cp .;pdfbox-app.jar;Athena.jar Athena NPCGenerator -pdf
我编写了一个 Java 程序,它使用来自 Apache PDFBox jar 应用程序的 类。我在目录中有编译的 类 和 PDFBox jar 文件。我可以 运行 成功:
java -cp .;pdfbox-app.jar Athena NPCGenerator -pdf
但是,当我启动自己的程序并尝试以类似方式在同一个地方 运行 时,失败了:
java -cp .;pdfbox-app.jar -jar Athena.jar NPCGenerator -pdf
错误信息:
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/pdfbox/pdm
odel/PDDocument
at CharacterPDF.writePDF(CharacterPDF.java:49)
at NPCGenerator.printToPDF(NPCGenerator.java:302)
at NPCGenerator.makeAllNPCs(NPCGenerator.java:278)
at NPCGenerator.main(NPCGenerator.java:316)
at Athena.runApp(Athena.java:88)
at Athena.main(Athena.java:104)
Caused by: java.lang.ClassNotFoundException: org.apache.pdfbox.pdmodel.PDDocumen
t
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)
... 6 more
我需要做什么来解决这个问题?
如果您使用 -jar 标志 java 它需要一个可执行的 jar。然后它将忽略命令行上的 class 路径并从 jars 清单中读取 class 路径。
您可以将 pdfbox-app.jar 与 main-class 属性一起添加到 Athena.jar 中的清单中。您甚至可以在清单中指定 jar 的相对或绝对路径。
Main-Class: Athena
Class-Path: pdfbox-app.jar
或者您不能使用 -jar 并通过命令行将 Athena.jar 添加到您的 class 路径。在这种情况下,您还需要在命令行上指定主要 class,因为在这种情况下 java 不会读取清单。
java -cp .;pdfbox-app.jar;Athena.jar Athena NPCGenerator -pdf