Проблема сборки Spring - не удается найти схему beans - PullRequest
4 голосов
/ 28 июля 2010

Я использую Maven2 и Spring 3, когда я запускаю свой проект в Eclipse, все работает нормально, но когда я использую ассемблер: сборка, результирующий jar выдает следующее исключение:

Exception in thread "main" 
org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 4 
in XML document from class path resource [beans.xml] is invalid; nested exception 
is org.xml.sax.SAXParseException: cvc-elt.1: Cannot find the declaration of 
element 'beans'.

мой файл бобов выглядит примерно так:

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

этот файл хранится в src / main / resources

my pom.xml имеет следующую зависимость для весны:

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>3.0.3.RELEASE</version>
    <type>jar</type>
    <scope>compile</scope>
</dependency>

есть идеи, почему это происходит? как исправить?

UPDATE:

дальнейшие исследования Google выясняют, что Spring и Maven не слишком хорошо ладят со следующим в моем pom.xml, хотя решения пока не найдено:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>2.2-beta-5</version>
    <configuration>
        <archive>
            <manifest>
                <mainClass>org.robert.xclades.Main</mainClass>
            </manifest>
        </archive>
        <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
    </configuration>
</plugin>

Ответы [ 3 ]

2 голосов
/ 05 августа 2010

У меня была такая же проблема. Использование плагина shade помогло, но мне пришлось добавить преобразователь, как описано в http://maven.apache.org/plugins/maven-shade-plugin/examples/resource-transformers.html, для объединения файлов обработчика и схемы Spring.

2 голосов
/ 13 августа 2013

Одно решение, которое я обнаружил, работающее с Spring 2.5.6, - это включение одной банки Spring вместо отдельных. Я не уверен, есть ли баночка для печати для Spring 3.x.

<dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring</artifactId>
        <version>2.5.6</version>
</dependency>
1 голос
/ 28 июля 2010

Проблема, похоже, заключается в том, что существует конфликт между каждым из различных spring.handlers и spring.schemas в папках META-INF различных зависимостей Spring.

Уловка, которую я нашел, состоит в том, чтобы переопределить их, создав эти файлы в src / main / resources / META-INF и скопировав и вставив в них содержимое этих отдельных файлов.Во-вторых, используйте maven-jar-plugin, чтобы установить mainClass манифеста;и maven-shade-plugin, вместо maven-assembly-plugin.Таким образом, обновленный файл pom.xml выглядит следующим образом:

<plugin>
    <artifactId>maven-jar-plugin</artifactId>
    <configuration>
        <archive>
            <manifest>
              <mainClass>org.robert.xclades.Main</mainClass>
            </manifest>
        </archive>
    </configuration>
</plugin>
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
              <goal>shade</goal>
            </goals>
        </execution>
    </executions>
</plugin>

Итак, все, что требуется сейчас, это maven package.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...