2011-08-17 22 views
7

Según this pregunta y this pregunta, estoy recibiendo el siguiente error:Maven y primavera = No se puede crear el contexto de aplicación: No se puede localizar la 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, esto es debido a algún error en Maven, así que aquí está mi POM relevante:

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

aquí es mi contexto de aplicación:

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

Entonces, el objetivo es combinar las cosas en un JAR, pero creo que ese podría ser el problema. ¿Alguien puede explicarme cuál es el problema y cómo puedo resolverlo? Las otras preguntas a las que se hace referencia tienen una configuración y un objetivo diferentes, por lo que no puedo seguir exactamente su ejemplo.

Respuesta

7

No es un error en maven, de verdad. Es el resultado de un enfoque simplista para construir un uber-jar. Los manejadores de espacio de nombres de Spring están registrados en un archivo en META-INF/spring.handlers. Varios de los módulos de resorte tienen sus propios espacios de nombres, y por lo tanto, encontrarás este archivo en muchos tarros de primavera diferentes. Si no fusionas estos archivos al construir tu uber-jar, terminarás con uno sobrescribiendo a todos los demás, lo que obviamente significa que faltarán algunos controladores. Cualquier mecanismo que le permita especificar un archivo spring.handlers con todos los controladores necesarios funcionará. Construir uno propio y asegurarse de que se use en el artefacto final sería de una sola manera.

+1

¡Gracias, eso explica el problema! Es un poco fastidioso, pero lo explica. Si hubiera una forma de empaquetar los JAR dentro de los JAR ... ¡Ups !, creo que rompí el continuo del espacio-tiempo. –

+1

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

+0

Tú, mi amigo, también recibes una respuesta a una pregunta diferente. \ m/ –

6

Me encontré con el mismo problema. Pero, afortunadamente, mi compañero de equipo había descubierto cómo crear el jar de uber para conservar los archivos meta-inf. Aquí está el fragmento de pom que me ayudó.

<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

Funciona perfectamente. No creería la cantidad de dolor de cabeza que esto resolvió para mí. ¡¡¡Gracias!!! –

+0

¿De qué se trata la de? –

+0

La misma pregunta que Peter Perháč, ¿configuró los transformadores dentro de maven-assembly-plugin o usó maven-shade-plugin? – ZheFrench

Cuestiones relacionadas