红联Linux门户
Linux帮助

IDEA导出jar包后运行报错 找不到或无法加载主类

发布时间:2017-04-21 11:22:17来源:cnblogs.com/acm-bingzi作者:贾树丙
开发工具:IDEA16
运行环境:ubuntu
 
问题:根据网上的Idea导出jar包的方法,将我的项目导出jar包后运行报错:找不到或无法加载主类。
 
为了找到这个原因,我重新搭建了一个测试例子,在src/com下新建了一个HelloWorld.java类,输出HelloWorld。然后把它导出jar包,依然报错:找不到或无法加载主类。
后来打开这个jar包发现在test.jar里边还有一个test.jar包。
IDEA导出jar包后运行报错 找不到或无法加载主类
 
然后我把里边这个jar包提取出来后,运行java -jar test.jar就不会报错了,也能正常输出HelloWorld
 
经过各种重复实验,重新尝试每一步的配置,终于发现了错误的地方。
根据网上的配置,在 Project Structure --> Artifacts中,添加jar包时,选择了copy to the out directory and link via manifest
Idea打jar包:选中第一个的话,打完包后是一个jar包
选中第二个的话,打完包后是一个jar包,外带你项目所用的jar包
IDEA导出jar包后运行报错 找不到或无法加载主类
 
如果选择了第二个,在下一步的配置中,就会出现两个test.jar。可以看到,上一步骤生成了一个test.jar,并且外边的test.jar还需要再重新创建一个MANIFEST.MF文件。
IDEA导出jar包后运行报错 找不到或无法加载主类
 
经过测试,即使我创建外边的MANIFEST.MF文件时,把里面的test.jar包打进去,依然会报错:找不到或无法加载主类。
IDEA导出jar包后运行报错 找不到或无法加载主类
 
综上所诉,我又尝试在最开始选择配置的时候,如果选择extract to the target JAR(提取到目标jar包)这个选项,那么对于我这个测试项目就完全没问题了,生成的test.jar包里包含MANIFEST.MF文件,并且这个包里不会再有其他的jar包了,就没有问题了。
 
但是如果我生成的jar包,需要引用其他的jar包,需要在下一步,Class Path栏里手动输入引入的jar包。
IDEA导出jar包后运行报错 找不到或无法加载主类
至于这里的classpath如何填写,相当于在之前错误用法时生成的META-INF/MANIFEST.MF文件里所引用的jar包一样。
 
本文永久更新地址:http://www.linuxdiyf.com/linux/30192.html