java jar metainf_jar包中META-INF文件作用

通常,一个工程下会有很多个java文件,以及会依赖很多外部的jar库,我们在运行该工程时一般会将其打包成一个jar,然后指定main方法以及依赖的第三方jar来运行。结构如下:

2b642082bd7bc29df914af4bd4990019.png

1、首先我们介绍一下jar文件和manifest:

JAR 文件非常类似 ZIP 文件——准确的说,它就是 ZIP 文件。JAR 文件与 ZIP 文件唯一的区别就是在 JAR 文件的内容中,包含了一个 META-INF/MANIFEST.MF 文件,这个文件是在生成 JAR 文件的时候自动创建的。该文件中最重要的两个信息是:

Class-Path:指定执行运行jar时的classpath;

Main-Class:指定运行时的main方法所在类;

1)如果我们打包时没有指定这两个项,那么我们使用java -jar xxx.jar指令运行jar文件,会出现”no main manifest attribute, in xxx.jar”(没有设置Main-Class)、ClassNotFoundException(找不到依赖包)等错误。如果我们打包时指定了上面两项,那么就可以直接使用java -jar xxx.jar指令运行jar文件

2)如果我们打包时没有指定,仍然想要运行该jar,那么需要额外的手动指定一些参数(-cp),例如:

java -cp lib/a.jar:lib/b.jar xxx.jar test.MainClass

-cp:指定依赖的jar,多个jar用冒号隔开;最后的test.MainClass是运行哪个main方法的类;

2、打包时如何指定manifest中class-path和main-class:

通常使用maven来打包,这时候可以使用一下maven-jar-plugin和maven-dependency-plugin插件打包:

org.apache.maven.plugins

maven-jar-plugin

2.6

true

lib/

com.xxg.Main

org.apache.maven.plugins

maven-dependency-plugin

2.10

copy-dependencies

package

copy-dependencies

${project.build.directory}/lib

1)maven-jar-plugin用于生成META-INF/MANIFEST.MF文件的部分内容,com.xxg.Main指定MANIFEST.MF中的Main-Class,true会在MANIFEST.MF加上Class-Path项并配置依赖包,lib/指定依赖包所在目录。

2)maven-dependency-plugin插件用于将依赖包拷贝到${project.build.directory}/lib指定的位置,即lib目录下

配置完成后,通过mvn package指令打包,会在target目录下生成jar包,并将依赖包拷贝到target/lib目录下,目录结构如下:

f66ce060cab38b915d6a687a28531568.png

3)查看test.jar中manifest文件,如下:

Class-Path: lib/commons-logging-1.2.jar lib/commons-io-2.4.jar

Main-Class: com.xxg.Main

4)这时就可以直接使用java -jar test.jar 运行该工程了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值