最近通过一个简单的demo验证一个问题,打包的时候遇到了一些问题,比如依赖的jar包找不到,入口的类找不到等待,尝试了网上的各种方法,最后通过下面的步骤成功了。
删除工程的临时目录classes和target,删除META-INF文件夹
File->Project Structure->Artifacts
点击+号,选择JAR->from modules with dependencies
不要填写Main class(我的demo里面有多个main所以没有填写Main class),默认选择extract to the target JAR(这样会把被依赖的jar包打包到一起)
点击OK(如果弹出错误已经存在MANIFEST.MF,就把META-INF文件夹删除,重复上面的步骤)
Build->Build Artifacts->Build
在classes文件夹下面生成了对应的jar
删除jar包里面META-INF文件夹里面除了.MF和.RSA的文件,即只保留.MF和.RSA文件,否则会报错1)
通过java -cp xxx.jar 类路径.类名执行
过程中遇到的一些报错
1)找不到或无法加载主类 xx.xx.xx
2)
Error: A JNI error has occurred, please check your installation and try again
Exception in thread “main” java.lang.NoClassDefFoundError:
3)签名问题报错
Error: A JNI error has occurred, please check your installation and try again
Exception in thread “main” java.lang.SecurityException: Invalid signature file digest for Manifest main attributes
at sun.security.util.SignatureFileVerifier.processImpl(SignatureFileVerifier.java:284)
at sun.security.util.SignatureFileVerifier.process(SignatureFileVerifier.java:238)