簡體   English   中英

Javac找不到同一目錄中的類

[英]Javac can't find class that is in the same directory

我正在嘗試編譯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

您需要包含. (當前目錄)在您的類路徑中:

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

一些注意事項:

  • . 在默認的類路徑中,但是如果您使用-cp指定一個顯式的類路徑,那么只有在您指定它時才包括它。
  • 此答案的先前版本已添加. 到類路徑的末尾,但是aioobe表示通常將其放在首位,這很有意義,因此我進行了相應的編輯。 (類路徑是按順序搜索的,因此,如果您有一個類的兩個副本,一個在.庫中,一個在一個庫中,那么您可能希望.版本取代該庫的版本,因此您需要首先列出它。當然,擁有一個類的兩個不同的副本通常不是一件好事!
  • 您粘貼的內容看起來像一個* nix shell,但是您正在使用; ,這是Windows上預期的分隔符。 (在* nix上,預期的分隔符是: 。)這可能是正確的,例如,如果您使用的是Cygwin,但我想我只是為了以防萬一。

如果您不搜索當前目錄(您的類路徑沒有), javac不會為您添加該目錄作為其他默認目錄。

此行為允許為一個項目(源代碼文件集)一致地調用javac編譯器,而與調用編譯器的用戶的目錄無關。 如果采用其他方法,則必須確保始終從同一工作目錄進行編譯才能獲得相同的結果。

----在ruakh的出色回答中看到評論后進行編輯----

您看到的第二個問題與第一個無關。 “無法找到或加載主類”是因為您正在使用源代碼文件名而不是在該源代碼文件中定義的類名來調用java命令。

java命令運行類,而不運行源代碼文件。 當您記住一個源代碼文件可以包含多個類(即使它們通常不包含)時,這更有意義。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM