如何在命令行上访问Java依赖项



我有一个相当旧的小型Java应用程序,它可以选择使用Apache PDFBox库(以下称为"PDFBox-app.jar"(读取和导出PDF文件。所有文件,包括此资源,都存储在一个平面文件夹中。

当从JAR文件调用时,这一操作很好:

D:Prog!GitHubArena>java -jar Athena.jar NPCGenerator -p
OED NPC Generator
-----------------
Writing Gwenllian-ElfFtr1Wiz1.pdf

当从我的IDE(jGrasp(运行时,它也同样工作得很好。

但是当从命令行调用它时,它失败了,在它的JAR之外:

D:Prog!GitHubArena>java NPCGenerator -p
OED NPC Generator
-----------------
Writing Eoin-HalflingFtr1.pdf
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/pdfbox/pdmodel/PDDoc
ument
at CharacterPDF.writePDF(CharacterPDF.java:49)
at NPCGenerator.printToPDF(NPCGenerator.java:294)
at NPCGenerator.makeAllNPCs(NPCGenerator.java:270)
at NPCGenerator.main(NPCGenerator.java:308)
Caused by: java.lang.ClassNotFoundException: org.apache.pdfbox.pdmodel.PDDocument
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.j
ava:641)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoader
s.java:188)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
... 4 more

我应该怎么做才能在它自己的JAR之外的命令行上运行它?

您应该将pdfbox-jar和任何其他依赖项放在类路径上:

java -classpath .;pdfbox-app.jar NPCGenerator -p

如果没有这些,Java就不知道在哪里可以查找org/apache/pdfbox类。它查找相对于默认类路径(即当前目录.(的.class文件,但不查找jar内部。

最新更新