2011-08-17 74 views
7

this問題this的問題,我發現了以下錯誤:Maven和春天=無法創建應用程序上下文:無法找到春天NamespaceHandler

Unable to create application context: org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Unable to locate Spring NamespaceHandler for XML schema namespace [http://www.springframework.org/schema/context] 
Offending resource: class path resource [floodstream-mastercontrol.conf.xml] 

    at org.springframework.beans.factory.parsing.FailFastProblemReporter.error(FailFastProblemReporter.java:68) 
    at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:85) 
    at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:80) 
    at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.error(BeanDefinitionParserDelegate.java:284) 
    at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1332) 
    at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1325) 
    at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:136) 
    at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:93) 
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:493) 
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:390) 
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:334) 
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:302) 
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:143) 
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:178) 
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:149) 
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:212) 
    at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:126) 
    at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:92) 
    at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:130) 
    at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:465) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:395) 
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139) 
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83) 
    at com.floodstream.wowza.mastercontrol.ServerListener.onServerCreate(ServerListener.java:30) 
    at com.wowza.wms.server.Server.notifyServerCreate(Unknown Source) 
    at com.wowza.wms.server.Server.start(Unknown Source) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:616) 
    at com.wowza.wms.bootstrap.Bootstrap.startServer(Unknown Source) 
    at com.wowza.wms.bootstrap.Bootstrap.main(Unknown Source) 

顯然,這是因爲在一些錯誤的Maven的,所以這裏是我的相關POM:

<project> 
    <!-- dependencies omitted for brevity --> 

    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <version>2.3.2</version> 
       <configuration> 
        <source>1.5</source> 
        <target>1.5</target> 
       </configuration> 
      </plugin> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-dependency-plugin</artifactId> 
       <version>2.3</version> 
       <executions> 
        <execution> 
         <phase>package</phase> 
         <goals> 
          <goal>copy-dependencies</goal> 
         </goals> 
         <configuration> 
          <includeScope>runtime</includeScope> 
          <outputDirectory>${project.build.directory}/dependencies</outputDirectory> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-assembly-plugin</artifactId> 
       <version>2.2.1</version> 
       <executions> 
        <execution> 
         <goals> 
          <goal>single</goal> 
         </goals> 
         <phase>package</phase> 
         <configuration> 
          <descriptorRefs> 
           <descriptorRef>jar-with-dependencies</descriptorRef> 
          </descriptorRefs> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 
    </build> 
</project> 

這裏是我的應用程序上下文:

<?xml version="1.0"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:context="http://www.springframework.org/schema/context" 
     xsi:schemaLocation="http://www.springframework.org/schema/beans 
      http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
      http://www.springframework.org/schema/context 
      http://www.springframework.org/schema/context/spring-context-3.0.xsd"> 

    <context:load-time-weaver/> 
    <context:spring-configured/> 

    <!-- beans omitted for brevity --> 
</beans> 

因此,我們的目標是將事情整合到一個JAR中,但我認爲這可能是問題所在。有人可以解釋問題是什麼以及我可以如何解決它?其他參考問題有不同的設置和目標,所以我不能完全按照他們的領導。

回答

7

這不是一個在maven中的錯誤,真的。這是構建超級罐的簡單方法的結果。 Spring名稱空間處理程序在META-INF/spring.handlers的文件中註冊。幾個彈簧模塊都有自己的命名空間,因此您可以在許多不同的彈簧瓶中找到該文件。如果你在構建你的超級jar文件時沒有把這些文件合併在一起,你最終會用其中一個覆蓋所有其他文件,這顯然意味着你會錯過一些處理器。任何讓你指定一個spring.handlers文件的機制都可以運行。建立你自己的,並確保它被用於最終的神器將是一種方法。

+1

謝謝,這就解釋了問題!這有點令人失望,但它解釋了它。如果只有有一種方法可以將JAR包裝在JAR中...哎呀,我想我只是打破了時空連續。 –

+1

@TK:[One-JAR](http://one-jar.sourceforge.net/) –

+0

你,我的朋友也贏得了另一個問題的答案。 \ m/ –

6

我遇到了同樣的問題。不過謝天謝地,我的隊友已經想出瞭如何創建超級罐子來保存meta-inf文件。這是幫助我的pom片段。

<configuration> 
    <shadedArtifactAttached>true</shadedArtifactAttached> 
    <shadedClassifierName>jar-with-dependencies</shadedClassifierName> 
    <finalName>SpringWS-uber</finalName> 
    <transformers> 
     <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> 
     <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"> 
      <resource>META-INF/spring.tooling</resource> 
     </transformer> 
    </transformers> 
</configuration> 
+0

完美的作品。你不會相信這爲我解決頭痛的數量。謝謝!!! –

+0

什麼是的? –

+0

與PeterPerháč相同的問題,您是否在maven-assembly-plugin中設置了變形金剛,還是使用了maven-shade-plugin? – ZheFrench

相關問題