如何在命令提示符下运行具有多个类的Java程序?

18

目前我正在寻找一种不需要将Java程序添加到JAR文件的方法来从命令行运行它。我的程序包含以下类:

程序文件名 - MyProgram
主类 - Server1
第二个类 - Client Handler
包名 - Items
第三个类 - User1
第四个类 - User2

为了让用户1和用户2运行,必须先运行主类和客户端处理程序以及它们所在的包,因为它们是客户端类,并且依赖于主类。


你的方法有问题吗?你的构建目录是否在类路径上? - Elliott Frisch
6个回答

38
javac *.java // compliles all java files in the dir

java MyClass // runs the particular file
如果一个类依赖于尚未编译的其他类,则程序将无法运行。因此,在尝试运行依赖于其他文件的程序之前,应先编译所有文件。
如果您的文件已经打包好了,那么就像这样:
javac com.mypackage/.*java

java com.mypackage.MyClass

6
老实说,即使只编译一个文件,我也会经常这样做,因为 *.java 比 file.java 更短。 - Vineet Kosaraju
1
我在偶然发现上述方法之前浪费了三个小时。我将不同的类文件写在不同的文件中,并将它们全部放在同一个目录下进行编译。编译成功,程序运行正常。 - Unnikrishnan

12

您必须确保将 .class 文件的位置添加到类路径中。因此,如果它在当前文件夹中,则将 . 添加到您的类路径中。请注意,Windows 的类路径分隔符是一个半角分号,即 ;

javac -cp . PackageName/*.java
java -cp . PackageName/ClassName_Having_main

示例。假设您有以下内容:

  • 包名:com.test

  • 类名:Hello(具有主要函数)

  • Java文件位于“src/com/test/Hello.java”中

然后,从外部目录开始:

$ cd src
$ javac -cp . com/test/*.java
$ java -cp . com/test/Hello

请注意,你可以添加“-d”来指定编译时类文件的输出目录。

$ javac -d output_directory -cp . com/test/Hello

在 Windows 系统中,同样的事情也可以工作,我已经尝试过。

请查看来自 Oracle 官方网站的此链接


8

在编译代码后,您需要从顶层运行以下命令:

java -cp . com.myprogram.MyProgram

您描述的那个订单不重要。它们都会被编译在一起,MyProgram将引用Server1等。


那么-cp是做什么的?我以前从未看到它与java命令一起使用,但当我尝试时,它起作用了! - vladusatii

4

这可能超出您目前想要解决的问题范围,但您可以考虑使用构建系统Maven。首先,尝试一下;如何创建我的第一个Maven项目?

您可以使用它预定义构建顺序,并在需要时为您创建jar包(或不创建)。


1

执行两个相互依赖的Java程序。 (例如:两个文件Complex.java和Solution.java,其中Solution.java依赖于Complex.java。 因此,必须首先编译Complex.java,然后将Complex的类文件与Solution.java链接起来,最后执行Solution.class以获得输出。) 请参考语法的图像。

步骤1:
编译Complex.java
编译Complex.java
语法 - javac -d [path_where_class_File_build] [path_of_the_file\filename.java]
(Solution.java和Complex.java已链接。即Solution.java调用Complex.java)
步骤2:
编译Solution.java
与复杂类链接编译解决方案.java 在链接Complex.class(在步骤1中创建)

语法- javac -d [path_where_class_File_build] -cp [path_of_the_first_class_created] [path_of_the_file\filename.java]

步骤3:
执行Solution.class
java -cp [path_of_second_class_created] [class_Name]

(在第三步创建) 输入图像描述


1
听起来你只需要打开多个命令提示符并按照需要运行它们的顺序进行编译和运行。如果我误解了问题,请告诉我。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接