Не удалось найти Spring пространство имен имен пространства имен для пространства XML-схем http://www.springframework.org/schema/data/jpa

Я использую Spring и Hibernate в моем Java-проекте, который управляется Maven. Я создал сборку (jar с зависимостями), используя следующую команду mvn install assembly:assembly

Теперь, когда я пытаюсь запустить мой основной класс с помощью команды: java -cp xyz-1.0-SNAPSHOT-jar-with-dependencies.jar com.xyz.class я получаю следующую ошибку:

org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Unable to locate Spring NamespaceHandler for XML schema namespace [http://www.springframework.org/schema/data/jpa]**
Offending resource: class path resource [xyz-component-scans-config.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:76)
    at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.importBeanDefinitionResource(DefaultBeanDefinitionDocumentReader.java:271)
.
.

Я не понимаю, почему он не может найти NamespaceHandler? как у меня уже есть следующие зависимости в пом.

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-beans</artifactId>
      <version>3.1.0.RELEASE</version
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework.data</groupId>
      <artifactId>spring-data-jpa</artifactId>
      <version>1.0.2.RELEASE</version>
      <type>jar</type>
      <scope>compile</scope>
    </dependency> 
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>3.1.0.RELEASE</version>
      <scope>compile</scope>
    </dependency>

Я попробовал предложение в следующей ветке, но оно у меня не сработало. Невозможно найти Spring NamespaceHandler для пространства имен схемы XML [http://www.springframework.org/schema/data/jpa]

Исходный код для org.springframework.beans.factory.parsing.BeanDefinitionParsingException

Ответы

Ответ 1

Вам может быть лучше использовать плагин maven-shade, чтобы создать свою банку с зависимостями. Вот пример использования плагина:

        <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>
                <transformers>
                  <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                    <mainClass>com.stackexchange.stackoverflow.ExecutableJar</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>
              </configuration>
            </execution>
          </executions>
        </plugin>

По моему опыту, maven-shade-plugin - лучший способ создать банку uber. См. Мой другой SO ответ для более полного примера. Обратите внимание, что в этом примере не требуются сторонние банки, но плагин maven-shade прекрасно справляется с ними. Дать ему шанс!: -)

Ответ 2

Я использовал плагин [one-jar] (https://code.google.com/p/onejar-maven-plugin/).

У меня была такая же проблема; а именно, сборка maven испортила мои файлы spring.schema. (Плагин Maven, как известно, сделал это (spring ссылка форума от другого человека, испытывающего тот же вопрос)).

Если вы действительно хотите узнать, что здесь происходит, разверните свой .jar файл и посмотрите файлы spring.schema и spring.handlers. Посмотрите на продукт плагина сборки maven, прочитайте это (Необходимость понимания spring.handlers и spring.schemas) пост, в котором объясняется, как эти файлы используемый.

Ответ 3

Можете ли вы убедиться, что у вас есть Spring jar внутри вашей папки WEB-INF/lib?

А также убедитесь, что существует только одна версия.

Если он все еще не работает, будет полезно, если вы можете прикрепить заголовок конфигурации, в дополнение к той части тела, которую вы уже вставили.

Ответ 4

Я не очень хорошо знаком с целями сборки maven, но тот факт, что вы определяете эти зависимости для компиляции времени, может означать, что эти зависимости не включены в сборку. Не могли бы вы попытаться удалить:

<scope>compile</scope>

Части от ваших объявлений зависимостей?