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

时间:2024-01-31 15:01:41

开发工具:IDEA16

运行环境:ubuntu

问题:根据网上的Idea导出jar包的方法,将我的项目导出jar包后运行报错:找不到或无法加载主类。
 
  为了找到这个原因,我重新搭建了一个测试例子,在src/com下新建了一个HelloWorld.java类,输出HelloWorld。然后把它导出jar包,依然报错:找不到或无法加载主类。
  后来打开这个jar包发现在test.jar里边还有一个test.jar包
 
  然后我把里边这个jar包提取出来后,运行java -jar test.jar就不会报错了,也能正常输出HelloWorld
 
  经过各种重复实验,重新尝试每一步的配置,终于发现了错误的地方。
  根据网上的配置,在 Project Structure --> Artifacts中,添加jar包时,选择了copy to the out directory and link via manifest
 
  备注:我参考的Idea打jar包的方法链接是:http://www.cnblogs.com/blog5277/p/5920560.html
    他说:
    选中第一个的话,打完包后是一个jar包
    选中第二个的话,打完包后是一个jar包,外带你项目所用的jar包
 
 
  如果选择了第二个,在下一步的配置中,就会出现两个test.jar。可以看到,上一步骤生成了一个test.jar,并且外边的test.jar还需要再重新创建一个MANIFEST.MF文件
 
  
  经过测试,即使我创建外边的MANIFEST.MF文件时,把里面的test.jar包打进去,依然会报错:找不到或无法加载主类。
 
 
  综上所诉, 我又尝试在最开始选择配置的时候,选择extract to the target JAR(提取到目标jar包) 这个选项,那么对于我这个测试项目就完全没问题了,生成的test.jar包里包含MANIFEST.MF文件,并且这个包里不会再有其他的jar包了,就没有问题了
 
  但是如果我生成的jar包,需要引用其他的jar包,需要在下一步,Class Path栏里手动输入引入的jar包。
 
 
  至于这里的classpath如何填写,相当于在之前错误用法时生成的META-INF/MANIFEST.MF文件里所引用的jar包一样。
 
  原创文章,欢迎转载,转载请注明出处!