使用maven-shade-plugin插件打可执行jar包

来源:互联网 发布:js中使用contextpath 编辑:程序博客网 时间:2024/05/09 21:46

背景:

现在基本上都是采用maven来进行开发管理,我有一个需求是需要把通过maven管理的java工程打成可执行的jar包,这样也就是说必需把工程依赖的jar包也一起打包。而使用maven默认的package命令构建的jar包中只包括了工程自身的class文件,并没有包括依赖的jar包。所以根本不能执行。但我们可以通过配置插件来对工程进行打包。


步骤:

1、通过maven-assembly-plugin插件打包会出现一些问题,在此不讨论,参见:http://chenzhou123520.iteye.com/blog/1706242

我们推荐使用maven-shade-plugin,shade插件打包时在对spring.schemas文件处理上,它能够将所有jar里的spring.schemas文件进行合并,在最终生成的单一jar包里,spring.schemas包含了所有出现过的版本的集合,要使用shade插件,必须在pom进行如下配置,在<project>下面添加:

<build><resources><resource><directory>src/main/resources</directory></resource></resources><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-shade-plugin</artifactId><executions><execution><phase>package</phase><goals><goal>shade</goal></goals><configuration><transformers><transformerimplementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"><resource>META-INF/spring.handlers</resource></transformer><transformerimplementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"><resource>META-INF/spring.schemas</resource></transformer></transformers><filters><filter><artifact>*:*</artifact><excludes><exclude>META-INF/*.SF</exclude><exclude>META-INF/*.DSA</exclude><exclude>META-INF/*.RSA</exclude></excludes></filter></filters></configuration></execution></executions></plugin></plugins></build>

其中类似于下面这段,意思是把spring.handlers文件以append方式加入到构建的jar包中,spring.schemas同理,这样就不会存在出现xsd找不到的情况。

<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
     <resource>META-INF/spring.handlers</resource>
</transformer>


其中<filters>里面的配置项意思是在构建jar包时将META-INF目录下的SF、DSA、RSA文件排除在外,即不会包含在jar包里面。


2、配置完pom后,调用mvn clean install命令进行构建,构建成功后打开工程target目录,发现生成了2个jar包,一个为:original-XXX-0.0.1-SNAPSHOT.jar,另一个为:XXX-0.0.1-SNAPSHOT.jar,其中original...jar里只包含了工程自己的class文件,而另外的一个jar包则包含了工程本身以及所有依赖的jar包的class文件。我们只需要使用第二个jar包就可以了。


指定执行的main方法参见http://blog.csdn.net/xun_2008/article/details/16832151


0 0
原创粉丝点击