我对java不太有经验,这让我发疯。我写了一个java程序
FileManagement
,我需要从命令行运行它。
我可以使用
javac FileManagement/*.java
从命令行编译它,这将在该文件夹中创建所有类,但是当我尝试 java FileManagement.Main
时,它会显示:
线程“main”java.lang.NoClassDefFoundError 中出现异常: 文件管理/主要
问题是我已经在远程计算机上尝试了相同的过程,并且工作正常。它对我的不起作用。
如果您的
Main
类位于名为 FileManagement
的包中,请尝试:
java -cp . FileManagement.Main
在
FileManagement
文件夹的父文件夹中。
如果您的
Main
类不在包(默认包)中,则 cd 到 FileManagement
文件夹并尝试:
java -cp . Main
有关 CLASSPATH 以及 JRE 如何查找类的更多信息:
大家让我们来理解它的语法。
如果当前目录中存在类文件。
java -cp 。文件名
如果目录中存在类文件。转到父目录并输入下面的cmd。
java -cp 。 dir1.dir2.dir3.文件名
如果存在对外部 jar 的依赖,
java -cp .:./jarName1:./jarName2 文件名
希望这有帮助。
(这是KISS答案。)
假设当前目录中有几个 .java 文件:
$ ls -1 *.java
javaFileName1.java
javaFileName2.java
假设它们每个都有一个
main()
方法(所以它们是程序,而不是库),然后编译它们:
javac *.java -d .
这将生成与 .java 文件关联的“包”一样多的子文件夹。就我而言,所有 java 文件都位于同一包名称下
packageName
,因此仅生成了一个具有该名称的文件夹,因此要执行每个文件:
java -cp . packageName.javaFileName1
java -cp . packageName.javaFileName2
你的类的包名是什么?如果没有包名,那么最有可能的解决方案是:
java -cp FileManagement Main
单个
.java
文件的一个衬垫,称为 Main.java
:
javac Main.java && java -cp . Main