2012-07-26 97 views
2

我刚开始寻找骆驼,并开始了一些开箱即用的例子。它使用mvn camel:run时效果很好。我也试图把它打包成一个超级jar,并且能够从命令行执行它。包装骆驼项目与cxf罐子

我使用Maven shade插件来构建jar。当我尝试执行它,我得到这个错误:

Caused by: org.apache.cxf.BusException: No DestinationFactory was found for the namespace http://cxf.apache.org/transports/http. 
    at org.apache.cxf.transport.DestinationFactoryManagerImpl.getDestinationFactory(DestinationFactoryManagerImpl.java:126) 
    at org.apache.cxf.endpoint.ServerImpl.initDestination(ServerImpl.java:88) 
    at org.apache.cxf.endpoint.ServerImpl.<init>(ServerImpl.java:72) 
    at org.apache.cxf.jaxrs.JAXRSServerFactoryBean.create(JAXRSServerFactoryBean.java:149) 

我有这些相关部分其他:

<properties> 
     <camel.version>2.8.0-fuse-04-01</camel.version> 
     <cxf.version>2.4.3-fuse-02-02</cxf.version> 
    </properties> 


    <dependency> 
     <groupId>org.apache.camel</groupId> 
     <artifactId>camel-cxf</artifactId> 
     <version>${camel.version}</version> 
    </dependency> 

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

这里是变压器如何行家树荫插件中定义的:

<transformers> 
     <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> 
     <mainClass>org.apache.camel.spring.Main</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> 

我不知道我在想什么。有人可以帮我解决这个问题吗?请让我知道任何替代方法。

回答

2

在创建的jar中可能没有cxf.xml。

它应该位于META-INF/cxf/cxf.xml

阴影可能需要一个更完整的配置(见instance这个问题)

<configuration> 
    <transformers> 
    ... 
    <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"> 
     <resource>META-INF/cxf/cxf.extension</resource> 
    </transformer> 
    <transformer implementation="org.apache.maven.plugins.shade.resource.XmlAppendingTransformer"> 
     <resource>META-INF/extensions.xml</resource> 
    </transformer> 
    <transformer implementation="org.apache.maven.plugins.shade.resource.XmlAppendingTransformer"> 
     <resource>META-INF/cxf/extensions.xml</resource> 
    </transformer> 
    </transformers> 
</configuration> 
+0

我核实,cxf.xml是在罐子里可用。仍然看到相同的错误。 – user1555517 2012-07-27 17:32:16

1

我有同样的问题。我通过为bus-extensions.txt添加org.apache.maven.plugins.shade.resource.AppendingTransformer来解决这个问题。

这为我工作:

  <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-shade-plugin</artifactId> 
      <version>2.1</version> 
      <executions> 
       <execution> 
        <phase>package</phase> 
        <goals> 
         <goal>shade</goal> 
        </goals> 
        <configuration> 
         <shadedArtifactId>${ivyExecutable}</shadedArtifactId> 
         <finalName>${ivyExecutable}</finalName> 
         <createDependencyReducedPom>false</createDependencyReducedPom> 
         <shadedArtifactAttached>true</shadedArtifactAttached> 
         <shadedClassifierName>exec</shadedClassifierName> 
         <artifactSet> 
          <includes> 
           <include>*:*</include> 
          </includes> 
         </artifactSet> 

         <filters> 
          <filter> 
           <artifact>*:*</artifact> 
           <excludes> 
            <exclude>META-INF/*.SF</exclude> 
            <exclude>META-INF/*.DSA</exclude> 
            <exclude>META-INF/*.RSA</exclude> 
           </excludes> 
          </filter> 
         </filters> 
         <transformers> 
          <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"> 
           <resource>META-INF/cxf/bus-extensions.txt</resource> 
          </transformer> 
          <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/> 
          <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> 
           <mainClass>${mainClass}</mainClass> 
          </transformer> 
         </transformers> 
        </configuration> 
       </execution> 
      </executions> 
      <dependencies> 
       <dependency> 
        <groupId>org.apache.cxf</groupId> 
        <artifactId>cxf-buildtools</artifactId> 
        <version>2.2.12</version> 
        <type>jar</type> 
        <scope>compile</scope> 
       </dependency> 
      </dependencies> 
     </plugin>