使用maven打全量部署的jar包
最近有一个小项目是用jetty轻量级容器,所以需要把所有资源打成一个jar包放到服务器上面跑,这样不需要依赖任何的容器,用起来非常的方便。主要是用的maven的shade打包插件,下面贴上配置:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>1.2.1</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<filters>
<filter>
<!-- Exclude files that sign a jar (one or multiple of the dependencies).
One may not repack a signed jar without this, or you will get a SecurityException
at program start.
-->
<artifact>org.eclipse.jetty.orbit:javax.servlet</artifact>
<excludes>
<exclude>META-INF/*.SF</exclude>
<exclude>META-INF/*.DSA</exclude>
<exclude>META-INF/*.RSA</exclude>
</excludes>
</filter>
</filters>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/spring.schemas</resource>
</transformer>
<transformer
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>com.xxx.xxx.MainStart</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
ps:有一次在部署项目的时候遇到问题,不能加载spring的xsd文件,原因是服务器部署平台对于外网端口访问有限制,访问不了 org.springframework.xxx 。所以一直启动不了项目。但是spring会
根据META-INF/spring.schemas文件里面的映射关系,优先从jar包里面加载xsd和tdt文件,原因是spring很多jar包下面都有spring.schemas,打包的时候文件覆盖了,只有最后一个文件的内容,所以要改成追加式方法。需要添加下面代码:
<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/spring.schemas</resource>
</transformer>
上述配置,保证了所有jar包里面的spring.schemas文件内容整合在一起,这样spring读取xml的时候不会从外网读取配置做xml的schema或者dtd校验,解决了无法启动的问题。同理,如果打包的时候不需要某一些文件,参考上述excule相关的内容。
版权声明:本文为benlaten原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。