使用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 版权协议,转载请附上原文出处链接和本声明。
THE END
< <上一篇
下一篇>>