maven打的包带exec包比不带的大_maven: 打包可运行的jar包(java application)及依赖项处理...

IDE环境中,可以直接用exec-maven-plugin插件来运行java application,类似下面这样:

org.codehaus.mojo

exec-maven-plugin

1.2.1

exec

java

-classpath

ctas.importer.reader.app.Program

18行,改成自己的Main-Class类,然后用mvn exec:exec来运行,但是部署到生产环境中时,服务器上通常并不具备maven环境,只能用 java -jar xxx.jar这种方式来运行,下面是一些处理细节:

一、依赖项的处理

java application运行时需要查找依赖的第三方jar,如果查找classpath失败,就会报错,可以先用

mvn dependency:copy-dependencies -DoutputDirectory=target/lib

命令,把依赖的jar包全部导出到target/lib这个目录下

二、利用maven-jar-plugin修改META-INF\MANIFEST.MF 清单文件

java application的最终jar里,用解压工具打开后,可以看到META-INF目录下,有一个重要的清单文件 MANIFEST.MF,这里面可以指定 Main-Class及classpath,结构如下:

1 Manifest-Version: 1.02 Built-By: jimmy3 Build-Jdk: 1.7.0_094 Class-Path: lib/DataEntity-1.0.jar ...5 Created-By: Apache Maven 3.2.36 Main-Class: ctas.importer.reader.app.Program7 Archiver-Version: Plexus Archiver

其中第4行指定了classpath,也就是所依赖的jar包在什么地方,第6行表示main函数的入口类,默认情况下mvn clean package生成的jar包里,清单文件上并没有这2行,需要在pom.xml中添加插件

1

2 org.apache.maven.plugins

3 maven-jar-plugin

4

5

6

7 ctas.importer.reader.app.Program

8 true

9 lib/

10

11

12

13

14

15

第7行指定Main-Class,第9行指定classpath的相对路径,这样mvn package后,清单文件里就会自动添加Main-Class和Class-Path这二项

ok了,部署时把jar包和lib目录,都上传到服务器上 ,然后测试一下,顺利的话 java -jar  xxx.jar就可以了,如果要在后台运行,前面加 nohup

作者:菩提树下的杨过

出处:http://yjmyzz.cnblogs.com

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值