項目開發使用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