![](/img/trans.png)
[英]how to compile and run ExampleCallIn for asterisk-java using javac and java
[英]How to compile java package structures using javac
我正在嘗試編譯(從命令行)一個導入我自己的另一個包的 java 包。 我正在在線學習教程,但是當我嘗試編譯最終的 java 文件 (CallPackage.java) 時,似乎出現錯誤。
這是文件結構:
+ test_directory (contains CallPackage.java)
-> importpackage
-> subpackage (contains HelloWorld.java)
這是 CallPackage.java:
/// CallPackage.java
import importpackage.subpackage.*;
class CallPackage{
public static void main(String[] args){
HelloWorld h2=new HelloWorld();
h2.show();
}
}
這是 HelloWorld.java:
///HelloWorld.java
package importpackage.subpackage;
public class HelloWorld {
public void show(){
System.out.println("This is the function of the class HelloWorld!!");
}
}
$javac HelloWorld.java
。$javac CallPackage.java
。這給了我最后一個命令的錯誤:
CallPackage.java:1: package importpackage.subpackage does not exist
import importpackage.subpackage.*;
^
CallPackage.java:4: cannot find symbol
symbol : class HelloWorld
location: class CallPackage
HelloWorld h2=new HelloWorld();
^
CallPackage.java:4: cannot find symbol
symbol : class HelloWorld
location: class CallPackage
HelloWorld h2=new HelloWorld();
^
3 errors
如何編譯這兩個包? 非常感謝您的幫助!
問題是需要為每個命令(javac 和 java)設置類路徑:
嘗試的步驟
從 top_level 編譯 HelloWorld.java,而不是去分包:
$javac -cp . importpackage/subpackage/HelloWorld.java
以同樣的方式編譯 CallPackage.java:
$javac -cp . CallPackage.java
還使用類路徑運行文件:
$java -cp . CallPackage
注意:運行“$java CallPackage”將給出錯誤“錯誤:無法找到或加載主類 CallPackage”
總之,在每個步驟中,必須指定類路徑。 它在這樣運行后工作。
和我一樣的情況。 我通過同時編譯類來接管它。
例如,這是我的項目:
+ beerV1
-> classes
-> src
-> com
-> example
-> model
-> BeerExpert.java
-> web
-> BeerSelect.java
啤酒專家.java:
package com.example.model;
import ...
public class BeerExpert{
...
}
啤酒選擇.java:
package com.example.web;
import com.example.model.*;
import ...
public class BeerSelect {
...
}
如您所見: BeerSelect.java正在嘗試導入com.example.model包中的類。
第一次,我先通過命令編譯BeerExert.java :
--> javac -d classes src/com/example/model/BeerExpert.java
然后:
--> javac -d classes src/com/example/web/BeerSelect.java
結果是:
-->... error: package com.example.model does not exist
所以,我知道在這種情況下單獨編譯多個類是行不通的。
在谷歌上苦苦掙扎后,我發現了一個非常簡單的方法來解決這個問題:
只需一次編譯:
--> javac -d classes src/com/example/model/BeerExpert.java src/com/example/web/BeerSelect.java
最后,這是我得到的:
+ beerV1
-> classes
-> com
-> example
-> model
-> BeerExpert.class
-> web
-> BeerSelect.class
-> src
-> com
-> example
-> model
-> BeerExpert.java
-> web
-> BeerSelect.java
希望有幫助。
你確定 importpackage/subpackage 在你的類路徑中嗎?
-cp 路徑或 -classpath 路徑
指定在哪里可以找到用戶類文件,以及(可選)注釋處理器和源文件。 該類路徑覆蓋 CLASSPATH 環境變量中的用戶類路徑。 如果 CLASSPATH、-cp 和 -classpath 均未指定,則用戶類路徑由當前目錄組成。 有關更多詳細信息,請參閱設置類路徑。
如果未指定 -sourcepath 選項,還會在用戶類路徑中搜索源文件。
如果未指定 -processorpath 選項,則還會在類路徑中搜索注釋處理器。
http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javac.html
這是一個古老的話題,但谷歌把我帶到了這個網站。 為了完整起見,我想在@Vĩnh Thụy Trần 關於如何在將主類編譯到自定義文件夾后運行它的答案中添加一點。 雖然現在看起來微不足道,但我花了一些時間才把它做好。
為了運行您的項目,您還需要指定類的路徑:
java -classpath <directory> your.package.name.classname
或者
java -cp <directory> your.package.name.classname
再次以 Vĩnh Thụy Trần 的示例為例,該命令將如下所示:
java -cp classes com.example.web.BeerSelect
我希望它會幫助某人,因為我花了一些時間來弄清楚。
(1)首先編譯代碼
javac -d importpackage.subpackage.HelloWorld
(2)然后編譯CallPackage.java
javac CallPackage.java
刪除您的包文件夾(將您的代碼粘貼到其他文件夾后),然后在 cmd 中找到您當前代碼所在的文件夾並嘗試 javac -d 。 Helloworld.java(這也將創建Helloworldclass 和子包)並在編譯運行代碼后嘗試為您的mainfunction 代碼即Callpackage.java 嘗試相同的代碼try java Callpackage
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.