使用assembly打出的獨立可執行jar包啓動時報錯spring錯誤的解決方法

項目開發使用dubbo,想把服務打成可執行jar包,並將全部的依賴也打包到這個jar文件中,工程依賴使用了spring等,在使用maven的assembly打包成獨立可執行的jar包後,在執行時報以下錯誤:
Configuration problem: Unable to locate Spring NamespaceHandler for XML schema namespace
      網上對這個問題也有說起,這是assembly的一個bug.參見:http://jira.codehaus.org/browse/MASSEMBLY-360 緣由是spring的多個jar包中都含有spring.handlers和spring.schemas文件,而assembly只會把第一次遇到的文件打入jar包,後面遇到的都會skip掉。
      解決方法就是放棄assembly,使用shade插件來打包.在shade的打包配製中指明spring.handlers和spring.schemas文件會以append方式加入進來,從而確保其餘spring的jar中的這兩個文件的信息不會被遺漏。下面是一份配置的例子:java

 		    <plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-shade-plugin</artifactId>
				<version>1.4</version>
				<executions>
					<execution>
						<phase>package</phase>
						<goals>
							<goal>shade</goal>
						</goals>
						<configuration>
							<transformers>
								<transformer
									implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
									<mainClass>activiti.server.deploy.Server</mainClass>
								</transformer>
								<transformer
									implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
									<resource>META-INF/spring.handlers</resource>
								</transformer>
								<transformer
									implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
									<resource>META-INF/spring.schemas</resource>
								</transformer>
							</transformers>
						</configuration>
					</execution>
				</executions>
			</plugin>

右擊工程,運行mvn install 便可打包成功。spring

相關文章
相關標籤/搜索