英文:
How to debug why javac is unable to load a library with a valid path in -classpath option?
问题
我正在尝试使用Apache的PDFBox库。由于某种原因,javac无法加载pdfbox-2.0.28.jar。当我在Bash中运行以下任何一个命令时:
javac -cp "pdfbox-2.0.28.jar" MyPdf.java
javac -cp ".:pdfbox-2.0.28.jar" MyPdf.java
javac -cp "pdfbox-2.0.28.jar:." MyPdf.java
javac -sourcepath "pdfbox-2.0.28.jar" MyPdf.java
我会得到这个错误:
MyPdf.java:1: error: package org.apache.pdfbox does not exist
import org.apache.pdfbox.*;
^
1 error
我知道这个jar文件没有损坏,因为我可以轻松提取其中的内容。该jar文件中的类文件也存在。MyPdf.java是一个简单的Java代码,内容如下:
import org.apache.pdfbox.*;
public class MyPdf {
public static void main (String... args) {}
}
我的目录结构如下:
pdf
├── MyPdf.java
├── pdfbox-2.0.28.jar
└── sample.pdf
pdfbox-2.0.28.jar文件的文件列表如下:
$ unzip -l pdfbox-2.0.28.jar
Archive: pdfbox-2.0.28.jar
Length Date Time Name
--------- ---------- ----- ----
18161 2023-04-10 10:05 META-INF/MANIFEST.MF
0 2023-04-10 12:05 META-INF/
1655 2023-04-10 10:04 META-INF/DEPENDENCIES
23477 2023-04-10 10:04 META-INF/LICENSE
638 2023-04-10 10:04 META-INF/NOTICE
0 2023-04-10 12:05 META-INF/maven/
0 2023-04-10 12:05 META-INF/maven/org.apache.pdfbox/
0 2023-04-10 12:05 META-INF/maven/org.apache.pdfbox/pdfbox/
134 2023-04-10 10:05 META-INF/maven/org.apache.pdfbox/pdfbox/pom.properties
43315 2023-04-10 10:04 META-INF/maven/org.apache.pdfbox/pdfbox/pom.xml
0 2023-04-10 12:05 org/
0 2023-04-10 12:05 org/apache/
0 2023-04-10 12:05 org/apache/pdfbox/
0 2023-04-10 12:05 org/apache/pdfbox/contentstream/
431 2023-04-10 10:04 org/apache/pdfbox/contentstream/PDContentStream.class
7327 2023-04-10 10:04 org/apache/pdfbox/contentstream/PDFGraphicsStreamEngine.class
25077 2023-04-10 10:04 org/apache/pdfbox/contentstream/PDFStreamEngine.class
0 2023-04-10 12:05 org/apache/pdfbox/contentstream/operator/
... 省略部分 ...
1514 2023-04-10 10:04 org/apache/pdfbox/util/filetypedetector/ByteTrie$ByteTrieNode.class
2585 2023-04-10 10:04 org/apache/pdfbox/util/filetypedetector/ByteTrie.class
1880 2023-04-10 10:04 org/apache/pdfbox/util/filetypedetector/FileType.class
3308 2023-04-10 10:04 org/apache/pdfbox/util/filetypedetector/FileTypeDetector.class
--------- -------
5603142 879 files
我查看了来自这个网页搜索查询的一些搜索结果,包括这里的一个,但都没有解决我的问题。
我如何找出我做错了什么?这不是我第一次使用classpath加载库,但我无法使这个东西工作。
英文:
I'm trying to use Apache's PDFBox library. For some reason, javac is unable to load pdfbox-2.0.28.jar. When I run any of the following commands in Bash:
javac -cp "pdfbox-2.0.28.jar" MyPdf.java
javac -cp ".:pdfbox-2.0.28.jar" MyPdf.java
javac -cp "pdfbox-2.0.28.jar:." MyPdf.java
javac -sourcepath "pdfbox-2.0.28.jar" MyPdf.java
I get this error:
MyPdf.java:1: error: package org.apache.pdfbox does not exist
import org.apache.pdfbox.*;
^
1 error
I know that the jar file is not corrupted because I can extract its contents without a problem. The class files within that jar files also exist. The MyPdf.java is a simplistic java code with following content:
import org.apache.pdfbox.*;
public class MyPdf {
public static void main (String... args) {}
}
My directory tree:
pdf
├── MyPdf.java
├── pdfbox-2.0.28.jar
└── sample.pdf
File list of pdfbox-2.0.28.jar file:
$ unzip -l pdfbox-2.0.28.jar
Archive: pdfbox-2.0.28.jar
Length Date Time Name
--------- ---------- ----- ----
18161 2023-04-10 10:05 META-INF/MANIFEST.MF
0 2023-04-10 12:05 META-INF/
1655 2023-04-10 10:04 META-INF/DEPENDENCIES
23477 2023-04-10 10:04 META-INF/LICENSE
638 2023-04-10 10:04 META-INF/NOTICE
0 2023-04-10 12:05 META-INF/maven/
0 2023-04-10 12:05 META-INF/maven/org.apache.pdfbox/
0 2023-04-10 12:05 META-INF/maven/org.apache.pdfbox/pdfbox/
134 2023-04-10 10:05 META-INF/maven/org.apache.pdfbox/pdfbox/pom.properties
43315 2023-04-10 10:04 META-INF/maven/org.apache.pdfbox/pdfbox/pom.xml
0 2023-04-10 12:05 org/
0 2023-04-10 12:05 org/apache/
0 2023-04-10 12:05 org/apache/pdfbox/
0 2023-04-10 12:05 org/apache/pdfbox/contentstream/
431 2023-04-10 10:04 org/apache/pdfbox/contentstream/PDContentStream.class
7327 2023-04-10 10:04 org/apache/pdfbox/contentstream/PDFGraphicsStreamEngine.class
25077 2023-04-10 10:04 org/apache/pdfbox/contentstream/PDFStreamEngine.class
0 2023-04-10 12:05 org/apache/pdfbox/contentstream/operator/
... snipped ...
1514 2023-04-10 10:04 org/apache/pdfbox/util/filetypedetector/ByteTrie$ByteTrieNode.class
2585 2023-04-10 10:04 org/apache/pdfbox/util/filetypedetector/ByteTrie.class
1880 2023-04-10 10:04 org/apache/pdfbox/util/filetypedetector/FileType.class
3308 2023-04-10 10:04 org/apache/pdfbox/util/filetypedetector/FileTypeDetector.class
--------- -------
5603142 879 files
I looked at some of the search results from this web search query, including the one here but none of them solved my problem.
How do I figure out what I'm doing wrong? It is not the first time for me to load a library using classpath but I cannot get this thing to work.
答案1
得分: 1
org.apache.pdfbox.* 不渲染到任何类,因为它在您的JAR文件内部不包含org/apache/pdfbox目录中的任何类。您应该导入像org.apache.pdfbox.contentstream.operator.* 这样包含实际类的内容。尝试一下。
英文:
org.apache.pdfbox.* doesn't render to any classes, because it doesn't contain any classes in org/apache/pdfbox dir inside your jar. You should import something like org.apache.pdfbox.contentstream.operator.* — anything with actual classes inside. Try it.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论