当我的 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
我是亲戚 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