当我的 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.[=17= 自下而上地了解包文件与主程序的关系。 ]

我的桌面上有一个名为 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 文件,它定义了具有以下内容的人类 class:

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

如您所见,我的 class 路径包含对 MyProgram.java 文件当前位置 (".") 的引用,并且它包含对 classes 文件夹 ("./classes/") 的引用,这是内部 org.somepackage 包的基本位置其子文件夹 (./classes/org/somepackage/) 上可以找到 Human.class 文件。

在这个阶段,我只是希望 java 引擎将 MyProgram.java 编译成程序 MyProgram.class - 但是,相反,我得到一个错误:

MyProgram.java:1: 错误:包组织不存在

我一直在按照此处列出的说明进行操作:

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

而且我似乎没有偏离说明 - 但我无法在 Whosebug 或其他任何地方找到关于此编译失败的可能原因的解释。如果有人有想法,将非常感谢您的帮助。

谢谢,

你的错误在这里

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();

  }

你忘记导入了 class其实你需要写这个名字 import org.somepackage.Human; 导入所有包内容 import org.somepackage.*; 或在您的代码中写入 class 的完整限定名称

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 by

java -cp "classes" MyProgram