javac是无法找到类是在同一目录(Javac can't find class that

2019-06-26 08:36发布

我试图编译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

Answer 1:

您需要包括. (当前目录)在类路径:

javac -cp ".;bc-j-mapi-w-2.4.jar;apache-commons/*;json-org/*;lib/*" BrightcoveVideoQueryPOI.java

一些注意事项:

  • . 在默认类路径,但如果使用-cp指定一个明确的类路径,那么它只有在指定其包括在内。
  • 这个答案的早期版本中添加. 到classpath结束,但aioobe说,这是典型的把第一,这是有道理的,所以我相应的修改。 (类路径中搜索顺序,因此,如果你有一个类的两个副本,一个在.和一个在库中,那么你可能想要的.版本取代了库版本,所以你需要先列出它。但是,当然,这不是通常有一个类的两个不相同的拷贝一个好东西!)
  • 什么你粘贴看起来像* nix的外壳,但你使用; ,预计在Windows上的分隔符。 (* nix上的预期分隔符是: 。)这很可能是正确的,例如,如果你使用Cygwin的,但我想我会提到它,以防万一。


Answer 2:

如果没有搜索您的当前目录(你的类路径中不) javac不会为你添加目录作为一个额外的默认。

此行为可以javac编译器始终如一地为独立的目录中调用该编译器用户的项目(组源代码文件)被调用。 如果它是任何其他方式,那么你就必须确保你总是从同一个工作目录编制,以获得相同的结果。

----在ruakh的出色答卷看到评论后编辑----

您所看到的第二个问题是不相关的第一。 该“无法找到或加载主类”是因为你调用java源代码文件名不属于其在源代码文件中定义的类名的命令。

java命令运行类,而不是源代码文件。 当你还记得单一源代码的文件可能包含不止一个类(即使它们通常不会)这更有意义。



文章来源: Javac can't find class that is in the same directory