2011-08-17 18 views
7

Come per this domanda e this domanda, sto ottenendo il seguente errore:Maven e Spring = Impossibile creare contesto di applicazione: Impossibile individuare primavera 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) 

Evidentemente, questo è a causa di qualche bug in Maven, quindi ecco la mia POM rilevanti:

<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> 

Ecco il mio contesto di applicazione:

<?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> 

Quindi, l'obiettivo è combinare le cose in un unico JAR, ma penso che questo potrebbe essere il problema. Qualcuno può spiegare qual è il problema e come posso risolverlo? Le altre domande referenziate avevano un setup e un obiettivo diversi, quindi non posso seguire esattamente il loro esempio.

risposta

7

Non è un bug in Maven, davvero. È il risultato di un approccio semplicistico alla costruzione di un uber-jar. I gestori di Spring namespace sono registrati in un file su META-INF/spring.handlers. Molti dei moduli primaverili hanno i loro spazi dei nomi, e quindi troverai questo file in molti diversi vasi primaverili. Se non unisci questi file insieme quando costruisci il tuo uber-jar, finirai con uno di questi sovrascrivendo tutti gli altri, il che ovviamente significa che mancherai alcuni gestori. Funzionerà qualsiasi meccanismo che permetta di specificare un file spring.handlers con tutti i gestori necessari. Costruire il proprio e assicurarsi che venga utilizzato nell'artefatto finale sarebbe un modo.

+1

Grazie, questo spiega il problema! È una specie di fiasco, ma lo spiega. Se solo ci fosse un modo per comprimere i JAR all'interno dei JAR ... whoops, penso di aver appena infranto il continuum spazio-temporale. –

+1

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

+0

Tu, amico mio, vinci anche una risposta a un'altra domanda. \ m/ –

6

Ho incontrato lo stesso problema. Ma per fortuna il mio compagno di squadra aveva capito come creare il vaso uber per conservare i file meta-inf. Ecco il frammento di pom che mi ha aiutato.

<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

Funziona perfettamente. Non crederesti alla quantità di mal di testa che questo ha risolto per me. Grazie!!! –

+0

Di cosa si tratta di? –

+0

Stessa domanda di Peter Perháč, hai impostato i trasformatori all'interno del plugin maven-assembly-plug o hai usato il plugin maven-shade-plug? – ZheFrench

Problemi correlati