在单个 jar 中合并多个 spring 依赖项时避免 spring.handlers/spring.schemas 被覆盖的想法
当使用 context:annotation-config 运行 (java -jar) 由 maven-assemble-plugin 组装并包含我的项目及其所有依赖项的 jar 时,我收到错误 无法找到 NamespaceHandler
。
正如其他人在 forum.springsource.org 线程(消息 #7/8) 上正确发现的问题发生这种情况的原因是,当 maven-assemble-plugin 重新打包时,不同 jar 中存在的文件 META-INF/spring.handlers
和 META-INF/spring.schemas
会被覆盖jars 在一个文件中。
查看两个 spring-*.jar 文件的内容,您可以看到这些文件相对于类路径位于相同的位置。
$ jar tf spring-oxm-3.0.3.RELEASE.jar
META-INF/spring.handlers
META-INF/spring.schemas
org/springframework/oxm/GenericMarshaller.class
...
$ jar tf spring-context-3.0.3.RELEASE.jar
META-INF/spring.handlers
META-INF/spring.schemas
org/springframework/context/ApplicationContext.class
是否可以将 META-INF 文件夹放在特定的包中?如果是这样,我建议的想法(希望它适用)是将 META-INF/spring.shemas
和 META-INF/spring.handlers
文件放在他们引用的包。
$ jar tf spring-oxm-3.0.3.RELEASE.jar
org/springframework/oxm/META-INF/spring.schemas
org/springframework/oxm/META-INF/spring.handlers
org/springframework/oxm/GenericMarshaller.class
...
$ jar tf spring-context-3.0.3.RELEASE.jar
org/springframework/context/META-INF/spring.handlers
org/springframework/context/META-INF/spring.schemas
org/springframework/context/ApplicationContext.class
这样,当它们合并到一个 jar 中时就不会发生冲突。你对此有何看法?
I got the error Unable to locate NamespaceHandler when using context:annotation-config
running (java -jar) a jar assembled by the maven-assembly-plugin and containing my project and all its dependencies.
As other people correctly spotted on the forum.springsource.org thread (message #7/8) the problem occurs because the files META-INF/spring.handlers
and META-INF/spring.schemas
that are present in different jars, get overwritten when the maven-assembly-plugin repackages the jars in a single file.
Looking at the content of two spring-*.jar files you can see the files sits in the same position relatively to the classpath
$ jar tf spring-oxm-3.0.3.RELEASE.jar
META-INF/spring.handlers
META-INF/spring.schemas
org/springframework/oxm/GenericMarshaller.class
...
$ jar tf spring-context-3.0.3.RELEASE.jar
META-INF/spring.handlers
META-INF/spring.schemas
org/springframework/context/ApplicationContext.class
Isn't it is possible to put the META-INF folder in a specific package? If so the idea I'd suggest, (hope it's applicable) is to put the META-INF/spring.shemas
and META-INF/spring.handlers
files under the package they refer to.
$ jar tf spring-oxm-3.0.3.RELEASE.jar
org/springframework/oxm/META-INF/spring.schemas
org/springframework/oxm/META-INF/spring.handlers
org/springframework/oxm/GenericMarshaller.class
...
$ jar tf spring-context-3.0.3.RELEASE.jar
org/springframework/context/META-INF/spring.handlers
org/springframework/context/META-INF/spring.schemas
org/springframework/context/ApplicationContext.class
This way they won't conflict when merged in a single jar. What do you think about it?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我设法使用着色器插件而不是(有缺陷的)汇编器插件来消除该错误:
我想我在 springsource 论坛上找到了解决方案..自从我查找它以来已经有一段时间了..真的不能记住作者。不管怎样,还是要向他致敬:p
干杯
I managed to get rid of the bug using the shader plugin instead of the (buggy) assembler plugin:
I think I found the solution on the springsource forums.. it has been quite some time since I looked it up.. can't really remember the author. Kudos to him anyways :p
cheers
与蚂蚁。
With Ant.