缺少cxf.xml?在Maven中失败,在Eclipse中工作

马特

我正在使用Apache CXF JAX-RS在Eclipse中构建项目。当我在Eclipse中运行主类时,它可以正常工作。当我在Maven中构建具有依赖项的jar时,它不起作用。这是我的pom.xml(我通过运行“ mvn clean compile assembly:single”进行构建):

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.theopentutorials.jaxrs</groupId>
    <artifactId>JsonCxfProvider</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <dependencies>
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-frontend-jaxrs</artifactId>
            <version>2.7.4</version>
        </dependency>

        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-transports-http-jetty</artifactId>
            <version>2.7.4</version>
        </dependency>

        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-rs-extension-providers</artifactId>
            <version>2.7.4</version>
        </dependency>

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.5</version>
        </dependency>

        <dependency>
            <groupId>org.codehaus.jettison</groupId>
            <artifactId>jettison</artifactId>
            <version>1.3.3</version>
        </dependency>

        <dependency>
            <groupId>javax.xml.bind</groupId>
            <artifactId>jaxb-api</artifactId>
            <version>2.2.7</version>
        </dependency>
    </dependencies>



    <build>
        <plugins>
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <configuration>
                    <archive>
                        <manifest>
                            <mainClass>com.theopentutorials.jaxrs.calc.CalcRESTStartUp</mainClass>
                        </manifest>
                    </archive>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                </configuration>

            </plugin>
        </plugins>
    </build>
</project>

这是我的主要课程:

public static void main(String[] args) {
    JAXRSServerFactoryBean sf = new JAXRSServerFactoryBean();
    sf.setResourceClasses(ResultsXml.class);
    sf.setResourceProvider(ResultsXml.class, new SingletonResourceProvider(new ResultsXml()));

    sf.setAddress("http://localhost:9999/open/");
    Server server = sf.create();
}

其中ResultsXml基本上是带注释的pojo类。在Eclipse中运行时,我可以在localhost:9999 / open /上发出请求,并且可以得到期望的JSON。但是,当我在maven中构建然后使用java -jar myjarfile.jar运行时,出现以下错误:

com.theopentutorials.jaxrs.calc.CalcRESTStartUp.main(CalcRESTStartUp.org)上的org.apache.cxf.jaxrs.JAXRSServerFactoryBean.create(JAXRSServerFactoryBean.java:197)上的线程“ main” org.apache.cxf.service.factory.ServiceConstructionException .java:15)原因:org.apache.cxf.BusException:找不到命名空间http://cxf.apache.org/transports/http的DestinationFactory 在org.apache.cxf.endpoint.ServerImpl上的org.apache.cxf.bus.managers.DestinationFactoryManagerImpl.getDestinationFactory(DestinationFactoryManagerImpl.java:130)在org.apache.cxf.endpoint.ServerImpl.initDestination(ServerImpl.java:88) 。(ServerImpl.java:72)at org.apache.cxf.jaxrs.JAXRSServerFactoryBean.create(JAXRSServerFactoryBean.java:155)...还有1个

到目前为止,我在Google / StackOverflow上能够找到的所有内容都表明此错误是由于缺少META-INF / cxf / cxf.xml文件引起的,这很有意义,因为我没有其中一个。但是,它如何在Eclipse中工作?

可能是Eclipse从一个碰巧具有我需要的配置的依赖罐中拾取了一个cxf.xml文件,但是当与maven打包时,它以不同的顺序拾取它们,所以行不通吗?我已经尝试创建自己的cxf.xml文件,但是我不确定要使用哪个文件(Maven构建日志建议在我所有的依赖项之间,大约有12个文件副本)-是否可以找到哪一个Eclipse正在使用?

编辑1

我尝试使用eclipse导出具有解压缩依赖项的可运行jar文件,当eclipse导出的jar时,我收到类似但微妙的消息:

从总线上找不到任何已注册的HttpDestinationFactory。org.apache.cxf.transport.http.HTTPTransportFactory

com.theopentutorials.jaxrs.calc.CalcRESTStartUp.main(CalcRESTStartUp)上的org.apache.cxf.jaxrs.JAXRSServerFactoryBean.create(JAXRSServerFactoryBean.java:199)上的线程“ main” org.apache.cxf.service.factory.ServiceConstructionException发生异常.java:15)原因:java.io.IOException:无法从总线上找到任何已注册的HttpDestinationFactory。在org.apache.cxf.endport.http.HTTPTransportFactory.getDestination(HTTPTransportFactory.java:295)在org.apache.cxf.endpoint.ServerImpl.initDestination(ServerImpl.java:93)在org.apache.cxf.endpoint.ServerImpl 。(ServerImpl.java:72)在org.apache.cxf.jaxrs.JAXRSServerFactoryBean.create(JAXRSServerFactoryBean.java:155)

编辑2

我尝试使用eclipse导出带有“将必需的库打包到jar中”的可运行jar文件-到目前为止,这似乎是可行的。是否有可能在Maven中复制它?

马特

似乎正确的解决方法是使用Maven Shade插件,这是我在某些Spring库中遇到完全相同的问题时发现的:

http://maven.apache.org/plugins/maven-shade-plugin/

由于几个cxf- * jar都在其中包含相同名称的文件(例如META-INF / cxf / cxf.xml),因此常规的jar-with-dependencies构建将包括第一个,然后忽略它找到的所有后续文件,它们都是'复制'。shade插件会将这些文件连接在一起,因此最后得到一个大文件,其中包含所需的所有条目。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

缺少cxf.xml?在Maven中失败,在Eclipse中工作

来自分类Dev

Eclipse中缺少maven-surefire-plugin

来自分类Dev

Eclipse中的Maven集成:缺少要求

来自分类Dev

Eclipse中的Maven集成:缺少要求

来自分类Dev

Maven中的CXF Web服务客户端生成失败

来自分类Dev

使用Apache CXF和CXF Maven插件在Eclipse Workspace中自动生成WSDL Java Stub

来自分类Dev

缺少cxf jar:请选择cxf主目录

来自分类Dev

Maven build/pom.xml 中缺少工件错误

来自分类Dev

cxf spring config无法加载,缺少xsd

来自分类Dev

cxf spring config无法加载,缺少xsd

来自分类Dev

Maven回购中缺少Jar

来自分类Dev

在IBM Worklight项目上工作时,Eclipse中的调色板中缺少jquerymobile小部件

来自分类Dev

CXF中的javax.xml.bind.UnmarshalException

来自分类Dev

CXF中的javax.xml.bind.UnmarshalException

来自分类Dev

OAuthRequestFilter中的CXF NullPointerException

来自分类Dev

失败的样本中缺少请求数据

来自分类Dev

在Gradle中缺少对Maven提供的范围的OOTB支持。Spring的Gradle propdeps插件无法正常工作

来自分类Dev

使用Maven进行构建时,缺少必需的Eclipse插件中的类

来自分类Dev

cxf创建客户端在Intranet中失败

来自分类Dev

Maven内部存储库中缺少工件

来自分类Dev

偏好设置中缺少Eclipse XSL选项

来自分类Dev

缺少Eclipse中的基本JavaDoc方法

来自分类Dev

Eclipse的下拉菜单中缺少图标

来自分类Dev

Eclipse的下拉菜单中缺少图标

来自分类Dev

Maven:缺少POM.xml中的工件com.sun:tools:jar:1.6.0编译时异常

来自分类Dev

CXF中的标头错误

来自分类Dev

CXF 中的响应超时属性

来自分类Dev

XML DOM中缺少节点-简单示例

来自分类Dev

使用python时xml中缺少属性

Related 相关文章

热门标签

归档