独立spring应用程序中的cxf webservice打包为jar,并使用maven提供依赖项

独立spring应用程序中的cxf webservice打包为jar,并使用maven提供依赖项,maven,xsd,cxf,Maven,Xsd,Cxf,当运行“java-jar my-app-0.0.1-SNAPSHOT-jar-with-dependencies.jar”这样的打包应用程序时,我得到以下错误: org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 47 in XML document from URL [jar:file:/.../cxf/javafirst/target/my-app-0.0.1-SNAPSHOT-jar-wit

当运行“java-jar my-app-0.0.1-SNAPSHOT-jar-with-dependencies.jar”这样的打包应用程序时,我得到以下错误:

org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 47 in
XML document from URL [jar:file:/.../cxf/javafirst/target/my-app-0.0.1-SNAPSHOT-jar-with-dependencies.jar!/application-context.xml]
is invalid; nested exception is org.xml.sax.SAXParseException; lineNumber: 47; 
columnNumber: 61; cvc-complex-type.3.2.2: Attribute 'sendServerVersion'
is not allowed to appear in element 'httpj:engine'.
这是由于apache.org上发布了过时的http-jetty.xsd模式。这不是我的问题。我的问题是,在以下情况下不会发生这种情况:

maven jetty:run

其中,服务直接在未打包的二进制目录上运行,显然可以找到已更新且正确的http-jetty.xsd模式文件

我想做一件事:

将Web服务放入一个包含依赖项的jar中。这还应该包括所有XML模式文件,因为显然,让web服务依赖于外部资源不是一个好主意

使用maven的最佳方法是什么

我可能最天真的解决方案是手动将XML模式文件复制到resources目录中,并告诉CXF在jar文件中解析它们。因此,我还有两个更具体的问题:

1.)是否可以让maven找到XML模式文件并将其复制到适当的位置? 2.)让CXF在jar文件中查找模式文件的推荐方法是什么

3.)有没有更好的最佳实践解决方案


关于maven assembly插件,我的maven配置是上两部分的直接组合。

Spring有一个非常好的机制来解析它所需要的模式文件-它通常根本不从web下载它,相反,在JAR文件中使用本地可用的文件来获取模式并验证XML,例如,考虑施普灵河中的上下文自定义命名空间架构,如果您查看Spun-CutExt.jar文件中的Meta -If/Sput.Schemas文件,您将看到沿着这些行的条目:

http\://www.springframework.org/schema/context/spring-context-3.1.xsd=org/springframework/context/config/spring-context-3.1.xsd

基本上,它所说的是从classpath
org.springframework.context.config.spring-context-3.1.xsd
文件解析spring-context-3.1.xsd文件

这也适用于任何第三方库,在您的例子中是http-jetty.xsd


我想我建议只需在META-INF/文件夹中的jar文件中创建一个spring.schemas文件,为模式的完整路径添加一个条目,并将其替换为http jetty.xsd的类路径版本。

Spring有一个非常好的机制来解析它所需的模式文件-它通常根本不从web下载,而是使用jar文件中本地可用的文件来获取模式并验证xml,例如,考虑施普灵河中的上下文自定义命名空间架构,如果您查看Spun-CutExt.JAR文件中的Meta -If/Sput.Schemas文件,您将看到沿着这些行的条目:

http\://www.springframework.org/schema/context/spring-context-3.1.xsd=org/springframework/context/config/spring-context-3.1.xsd

基本上,它所说的是从classpath
org.springframework.context.config.spring-context-3.1.xsd
文件解析spring-context-3.1.xsd文件

这也适用于任何第三方库,在您的例子中是http-jetty.xsd

我想我建议只需在META-INF/文件夹中的jar文件中创建一个spring.schemas文件,为模式的完整路径添加一个条目,并将其替换为类路径版本的http-jetty.xsd

maven exec:java