Maven spring - Не удается найти объявление элемента 'beans'
У меня есть проект spring, построенный с использованием maven (упакованный как jar) (зависимости копируются в отдельный каталог и добавляются в classpath)
Я хочу запустить его как java -jar
Проблема заключается в том, что при запуске я получаю:
Вызвано: org.xml.sax.SAXParseException: cvc-elt.1: не удается найти объявление
элемента 'beans'.
Это происходит потому, что spring.schemas и spring.handlers расположены в нескольких баночках, а именно: spring - beans и т.д.
Есть ли способ решить проблему, предполагая, что я не хочу использовать теневой плагин для распаковки всех зависимостей и конкатенации содержимого spring.schemas и spring.handlers?
Я также хотел бы избежать сохранения xsd файлов в моем проекте и изменения schemaLocation, чтобы указать на мое местоположение.
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:camel="http://camel.apache.org/schema/spring"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">
<camel:camelContext>
<camel:routeBuilder ref="fakeRouteBuilder"/>
</camel:camelContext>
<bean id="fakeRouteBuilder" class="<className>" />
</beans>
Ответы
Ответ 1
Я знаю 2 ситуации, в которых вы можете столкнуться с этой проблемой
- Если у вас нет подключения к Интернету (например, за прокси-сервером). В этом случае загрузите XSD, скопируйте его рядом с XML и измените расположение схемы на
xsi:schemaLocation=" http://www.springframework.org/schema/beans spring-beans-2.5.xsd ..."
- Если у вас есть подключение к Интернету/по-прежнему есть проблема, потому что вы используете разные версии Spring для XSD и jar.
Ответ 2
Я думаю, что XSD будет частью флага spring, поэтому не стоит беспокоиться.
Ответ 3
Spring содержат файлы META-INF/ spring.handlers и META-INF/spring.schemas. Чтобы избежать перезаписи файлов при объединении зависимостей с одной банкой, вы можете использовать плагин maven Shade:
http://maven.apache.org/plugins/maven-shade-plugin/examples/resource-transformers.html#AppendingTransformer
Ответ 4
У меня такая же проблема, потому что я был за прокси. Я запускал приложение Spring MVC под Tomcat 6. Просто добавил следующие строки в основном файле catalina.bat, и это решило мою проблему:
set JAVA_OPTS=%JAVA_OPTS% -Dhttp.proxyHost=XXXX -Dhttp.proxyPort=YYYYY -Dhttp.proxyUser=ZZZZ -Dhttp.proxyPassword=XXXXXX
Ответ 5
Мне удалось решить аналогичную проблему, очистив файл xsd из кеша удаленных ресурсов, "Окно" > "Настройки" > "Основные" > "Сетевое подключение" > "Кэш"
Ответ 6
В вашей XSD-декларации слишком много http://
. Попробуйте следующее:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:camel="http://camel.apache.org/schema/spring"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://camel.apache.org/schema/spring
http://camel.apache.org/schema/spring/camel-spring.xsd">
(ваш был http://http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
)
Ответ 7
Я получил эту ошибку, когда мой URL-адрес XSD указывает на другое местоположение, которое отличается от местоположения XSD, определяющего файл jar. Например, spring-beans-3.0.xsd
вместо spring-beans-2.5.xsd
vise-versa.
Ответ 8
Также вы можете использовать совет здесь для решения этой проблемы
Ответ 9
У меня была точно такая же проблема, и я думаю, что это вызвано двумя основными причинами:
- У вас разные версии для spring -зависимостей безопасности и ссылок на файлы XSD.
- Также это может произойти, если вы используете разные версии spring общей структуры и spring -security.
Ответ 10
META-INF/INDEX.LIST
файл, созданный плагином maven-assembly-plugin, также может быть виновником.
Причина: ошибка Java: "ClassLoader.getResources() возвращает только 1 экземпляр при использовании индексации jar"
Решение: отключить индексирование в дескрипторе сборки:
<indexed>false</indexed>
Ресурсы:
Spring JIRA SPR-5705
JDK-6957241 ClassLoader.getResources() возвращает только 1 экземпляр при использовании индексации jar