簡體   English   中英

當它包含一個外部Java程序包時,如何在命令行上編譯我的主Java程序?

[英]How do I compile my main Java program on the command line when it includes an external java package?

我是一個相對的Java新手,所以如果問題看起來有些基本,我深表歉意。 我在這里搜尋了一個高低的答案,但找不到任何有幫助的東西。

問題:

雖然我可以從IDE環境將外部程序包集成到Java程序中,但是我試圖通過命令行運行一個非常基本的程序,該程序調用我編寫的單獨的基本程序包文件,並且只是在做所有這些都是因為我想對Java中的包文件與主程序之間的關系有一個自下而上的了解。

我的桌面上有一個名為MyProgram.java的程序:

import org.somepackage;

public class MyProgram {

    public static void main(String arguments[]) {

    System.out.println("Programme up and running...");
    Human myHuman = new Human(); 
    myHuman.scream();

  }

仍然在桌面上,我還有一個名為src的文件夾,在其中創建了與包名稱相對應的必要子文件夾,即./src/org/somepackage-在此位置,我擁有了Human .java文件,其中定義了Human類,其內容如下:

package org.somepackage;

public class Human {

    public void scream() {

    System.out.println("I exist!!");

  }

}

然后,我再次在桌面上創建了一個classes文件夾,並在命令行上運行了以下編譯命令:

javac -d ./classes/ ./src/org/packagename/Human.java

運行正常,並按預期方式在./classes/org/packagename/位置中創建了Human.class文件。

但是,我失敗的地方是我隨后嘗試在命令行上編譯MyProgram.java的時候,即

javac -cp ".:./classes/" MyProgram.java

如您所見,我的類路徑包含對MyProgram.java文件當前位置( “。” )的引用,並且包含對類文件夾( “ ./classes/” )的引用,這是基本位置對於其中子文件夾( ./classes/org/somepackage/ )所在的org.somepackage軟件包,可以找到Human.class文件。

在此階段,我只是希望Java引擎將MyProgram.java編譯成程序MyProgram.class-但是,出現了一個錯誤:

MyProgram.java:1:錯誤:軟件包org不存在

我一直按照這里列出的說明進行操作:

https://www3.ntu.edu.sg/home/ehchua/programming/java/J9c_PackageClasspath.html

而且我似乎並沒有偏離指令-但我無法在Stackoverflow或其他任何地方找到有關此編譯失敗的可能原因的解釋。 如果有人有想法,將非常感謝您的幫助。

謝謝,

你的錯誤在這里

import org.somepackage; <--

public class MyProgram {

    public static void main(String arguments[]) {

    System.out.println("Programme up and running...");
    Human myHuman = new Human(); 
    myHuman.scream();

  }

您實際上忘記了導入類,您需要寫這個名字import org.somepackage.Human; 導入所有包內容import org.somepackage.*; 或在代碼中寫出類的完整合格名稱

org.somepackage.Human myHuman = new org.somepackage.Human(); 
myHuman.scream();

正確的錯誤:

import org.somepackage.Human;

public class MyProgram {

    public static void main(String arguments[]) {

    System.out.println("Programme up and running...");
    Human myHuman = new Human(); 
    myHuman.scream();

  } 

之后,通過以下命令編譯Human.java:

javac -d classes Human.java

和MyProgram.java

javac -d classes -cp "classes" MyProgram.java

並通過運行MyProgram

java -cp "classes" MyProgram

暫無
暫無

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

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