Ubuntu命令行运行含外部Jar的Java程序报错:主类无法找到或加载
解决Java运行时找不到主类的问题
嗨,这问题我刚学Java的时候也踩过坑!你编译成功但运行失败的原因其实很简单:运行命令里的classpath没包含当前目录。
问题根源
编译时用javac -cp jars/commons-lang3-3.7.jar MyTest.java能成功,是因为javac默认会把当前目录(.)加入classpath,所以能找到你的源文件并生成MyTest.class。但运行时规则不一样:当你显式指定-cp参数时,Java会覆盖默认的classpath设置(默认是.)——你只把外部Jar加到了classpath里,却没告诉Java要在当前目录找你的MyTest.class文件,自然就找不到主类了。
正确的运行命令
你需要把当前目录(.)和外部Jar一起加到classpath里,Linux/Unix系统下多个路径用冒号:分隔,命令如下:
java -cp .:jars/commons-lang3-3.7.jar MyTest
额外小技巧
如果后续要引用多个外部Jar,还可以用通配符简化命令,比如:
java -cp .:jars/*.jar MyTest
只要显式指定-cp,就一定要把自己写的类所在的目录(这里是当前目录)加进去,不然Java只会去你指定的Jar里找类,找不到你本地编译好的.class文件。
运行这个修正后的命令,你就能看到程序正常输出了!
内容的提问来源于stack exchange,提问作者Farley
相关产品推荐
相关产品推荐

