引入BouncyCastle依赖后运行Java程序报错:找不到主类PBE
问题根源与解决办法
嘿,我一眼就发现问题所在啦——你在类路径里用了Windows风格的分号;,但从ls -lat的输出能看出来你是在macOS或者Linux环境下操作,这类Unix-like系统的类路径分隔符是冒号:,不是分号哦!
具体错误分析
你之前的运行命令:
java -classpath 'bcprov-jdk15on-159.jar;pbe.jar;' PBE
在Unix-like系统里,分号;是用来分隔多个命令的,不是类路径条目。JVM会把整个字符串当成一个路径去查找,自然找不到你的PBE主类,而且末尾多余的分号还会引入一个空路径条目,进一步干扰查找。
快速解决办法
方法1:用你打包好的pbe.jar运行
把分号换成冒号,去掉末尾多余的分号:
java -cp bcprov-jdk15on-159.jar:pbe.jar PBE
方法2:不用打包,直接运行class文件
其实你完全没必要打包成pbe.jar,直接用当前目录(.代表当前目录,包含你的PBE.class)加依赖jar就能运行:
java -cp .:bcprov-jdk15on-159.jar PBE
进阶优化:让jar包可直接运行
如果你想让打包后的pbe.jar可以用java -jar直接运行,可以在打包时指定主类和依赖:
- 新建一个
manifest.txt文件,内容如下(注意最后要留一行空行!):
Main-Class: PBE Class-Path: bcprov-jdk15on-159.jar
Class-Path后面的路径要和bcprov-jdk15on-159.jar的实际位置对应,要是和pbe.jar在同一目录就直接写文件名。
- 用下面的命令打包:
jar cvfm pbe.jar manifest.txt PBE.class
之后就可以直接运行:
java -jar pbe.jar
内容的提问来源于stack exchange,提问作者oldhomemovie
相关产品推荐
相关产品推荐

