打包成jar文件后运行出现Invalid or corrupt jarfile 解决

【案例1】

jar太大,如超过100M

【解决】在POM文件中exclusion不必要的大的依赖。如:

<dependency>

<groupId>com.s</groupId>

<artifactId>r-dal</artifactId>

<exclusions>

<exclusion>

<artifactId>hibernate-core</artifactId>

<groupId>org.hibernate</groupId>

</exclusion>

          </exclusions>

</dependency>

【案例2】

MANIFEST.MF 错误

打jar包

1.jar -cvf hello.jar hello.class 

2.这时java -jar hello.jar 是运行不了的

 

3.解压刚打的Jar包到新的目录,会发现里边多了一个META-INF文件夹里边有一个MANIFEST.MF文件

 

4.用记事本打开MANIFEST.MF文件,修改为

Manifest-Version: 1.0

Main-Class: Hello

Created-By: aaa

5.将MANIFEST.MF复制到和Hello.class 放在一起

然后打包:

jar cvfm abc.jarMANIFEST.MFHello.class

得到可运行的jar

java -jar  ***   就可以运行的jar包[ 其中***为jar包名] 


  打 Java 包的时候可以有一个清单文件:MANIFEST.MF,它是打包的关键性文件,主要是设置执行入口类和支持库的路径,在运行 Java应用程序时会根据此文件中给出的信息来查找入口类和支持库。

它的内容一般包括:
 
Manifest-Version: 1.0
 
Created-By: 1.6.0 (Sun Microsystems Inc.)
 
Main-Class: HelloWorld
 
 
 
 
其中比较容易忽略的是还可以有一个Class-Path属性的设置, Class-Path :用来指定支持库的路径,程序运行时依据  Class-Path 项的设置路径来查找支持库,每一个支持库之间用空格分开。比如这样写清单文件:
 
 
Manifest-Version: 1.0
 
Class-Path: ./lib/msbase.jar ./lib/mssqlserver.jar ./lib/msutil.jar
 
Created-By: yourName
 
Main-Class: org.qiujy.test.TestDB
 

如果出现:

java.io.IOException: invalid header field

这样的错误的话,就说明MANIFEST.MF文件有问题,比如写成了这样:

Manifest-Version: 1.0

Main-Class:com.feishan.lottery.view.Index
Class-Path: jar/jdbc_feishan.jar jar/mysql5.0.3.jar

注意:

Main-Class:后面应该有一个空格
Manifest-Version: 1.0
Main-Class: com.feishan.lottery.view.Index
Class-Path: jar/jdbc_feishan.jar jar/mysql5.0.3.jar
这样写就对了注意:最后一行也要有一个回车键。否则后面那一行是不能打包进去的

最后用java -jar lottery.jar就可以运行了

这个 manifest.mf (证明)可以放在任何位置,也可以是其它的文件名,

只需要有 Main-Class: test.Test 一行,且该行以一个回车符结束

Manifest 技巧说明:

总是以Manifest-Version属性开头

每行最长72个字符,如果超过的化,采用续行

确认每行都以回车结束,否则改行将会被忽略

如果Class-Path 中的存在路径,使用"/"分隔目录,与平台无关

使用空行分隔主属性和package属性

使用"/"而不是"."来分隔package 和class ,比如 com/example/myapp/ (好像使用" ." 也可以)

class 要以.class结尾,package 要以 / 结尾

还有

你设置java_home了吗? 
想要删掉环境变量PATH只要把c:/java/jdk/bin(具体看你的路径)的“;”前的删掉就好了 

打开path 点下面那一大串,按home键(为了将光标移到开头) 
把你javac.exe的路径copy(只要文件夹路径)加到path然后加“;”号 
最后在cmd 里测试下 java-version          

 

      

总得来说,解决办法:

 
 
Manifest-Version: 1.0

Sealed: true

Main-Class: cn.baidu.main.Publish

 此处回车

 

【案例3】

本地上传文件错误

本地上传文件是以ASCII的方式上传到的,结果造成jar文件格式错误。

        

把左下角的“以ASCII方式上传文件”点掉

猜你喜欢

转载自aoyouzi.iteye.com/blog/2294299
今日推荐