我正在尝试编译Java文件,并且收到此错误消息:
$ javac -cp "bc-j-mapi-w-2.4.jar;apache-commons/*;json-org/*;lib/*" BrightcoveVideoQueryPOI.java
BrightcoveVideoQueryPOI.java:57: cannot find symbol
symbol : class BrightcoveAPI
location: class BrightcoveVideoQueryPOI
BrightcoveAPI brightcoveAPI = new BrightcoveAPI(BrightcoveAPI.PROD_READ_URL_TOKEN);
^
BrightcoveVideoQueryPOI.java:57: cannot find symbol
symbol : class BrightcoveAPI
location: class BrightcoveVideoQueryPOI
BrightcoveAPI brightcoveAPI = new BrightcoveAPI(BrightcoveAPI.PROD_READ_URL_TOKEN);
^
BrightcoveVideoQueryPOI.java:57: cannot find symbol
symbol : variable BrightcoveAPI
location: class BrightcoveVideoQueryPOI
BrightcoveAPI brightcoveAPI = new BrightcoveAPI(BrightcoveAPI.PROD_READ_URL_TOKEN);
^
3 errors
这表明javac找不到类BrightcoveAPI。我不确定问题是什么,因为它在同一目录中:
$ ls
apache-commons bc-j-mapi-w-2.4.jar BrightcoveAPI.class BrightcoveAPI.java BrightcoveVideoQueryPOI.java json-org lib
答案 0 :(得分:9)
您需要在类路径中包含.
(当前目录):
javac -cp ".;bc-j-mapi-w-2.4.jar;apache-commons/*;json-org/*;lib/*" BrightcoveVideoQueryPOI.java
一些注意事项:
.
位于默认的类路径中,但如果使用-cp
指定显式类路径,则仅在指定时才包含它。.
添加到类路径的末尾,但aioobe表示它通常放在第一位,这是有意义的,所以我已经相应地进行了编辑。 (按顺序搜索类路径,所以如果你有一个类的两个副本,一个在.
中,一个在库中,那么你可能希望.
版本取代库版本,所以你需要先列出它。但是,当然,拥有两个不同的类副本通常不是一件好事!);
,这是Windows上预期的分隔符。 (在* nix上,预期的分隔符为:
。)这可能是正确的,例如如果你正在使用Cygwin,但我想我会提到它以防万一。答案 1 :(得分:0)
如果您没有搜索当前目录(您的班级路径没有),javac
不会为您添加该目录作为其他默认目录。
此行为允许为项目(源代码文件集)一致地调用javac
编译器,而不依赖于调用编译器的用户的目录。如果是其他方式,则必须确保始终从同一工作目录编译以获得相同的结果。
----在看到ruakh的优秀答案评论后编辑----
您看到的第二个问题与第一个问题无关。 "无法找到或加载主要课程"是因为您使用源代码文件名调用java
命令,而不是在该源代码文件中定义的类名。
java
命令运行类,而不是源代码文件。当您记住单个源代码文件 可能包含多个类时(即使它们通常不会),这会更有意义。