У меня есть весенний проект, построенный с использованием maven (упакован как jar) (зависимости копируются в отдельный каталог и добавляются в classpath)
Я хочу запустить его как java -jar
Проблема в том, что когда я запускаю его, я получаю:
Причина: org.xml.sax.SAXParseException: cvc-elt.1: не удается найти объявление элемента 'бобы'.
Это происходит потому, что spring.schemas и spring.handlers расположены в нескольких банках, т. Е. Spring-beans и т. Д.
Есть ли способ ее решить, если предположить, что я не хочу использовать плагин shade для распаковки всех зависимостей и объединения содержимого 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>
Я знаю 2 ситуации, когда вы можете иметь эту проблему
xsi:schemaLocation=" http://www.springframework.org/schema/beans spring-beans-2.5.xsd ..."
Я думаю, что XSD будет частью весенней банки, поэтому не должно быть проблем.
Spring jar содержит файлы META-INF / spring.handlers и META-INF / spring.schemas.Чтобы избежать перезаписи файлов при объединении зависимостей в один jar, вы можете использовать плагин maven Shade:
http://maven.apache.org/plugins/maven-shade-plugin/examples/resource-transformers.html#AppendingTransformer
У меня та же проблема, потому что я был за прокси.Я запускал приложение Spring MVC под Tomcat 6. Просто добавил следующие строки в biginning моего файла catalina.bat , и это решило мою проблему:
set JAVA_OPTS=%JAVA_OPTS% -Dhttp.proxyHost=XXXX -Dhttp.proxyPort=YYYYY -Dhttp.proxyUser=ZZZZ -Dhttp.proxyPassword=XXXXXX
META-INF/INDEX.LIST файл, сгенерированный maven-assembly-plugin, также может быть виновником.
META-INF/INDEX.LIST
Причина: ошибка Java: «ClassLoader.getResources () возвращает только 1 экземпляр при использовании индексации jar»
Решение: отключить индексирование в дескрипторе сборки:
<indexed>false</indexed>
Ресурсы: Пружина JIRA SPR-5705 JDK-6957241 ClassLoader.getResources () возвращает только 1 экземпляр при использовании индексации jar
Мне удалось решить аналогичную проблему, очистив файл xsd из моего кэша удаленных ресурсов, «Окно»> «Установки»> «Основные»> «Сетевое подключение»> «Кэш»
У меня была точно такая же проблема, и я думаю, что она вызвана двумя основными причинами:
Также вы можете воспользоваться советом здесь , чтобы решить эту проблему
Я получил эту ошибку, когда мой URL-адрес XSD указывает на другое местоположение, которое отличается от определения местоположения XSD в файле jar. Например, spring-beans-3.0.xsd вместо spring-beans-2.5.xsd наоборот.
spring-beans-3.0.xsd
spring-beans-2.5.xsd
В вашей декларации XSD слишком много http://.Попробуйте это:
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)
http://http://www.springframework.org/schema/beans/spring-beans-2.5.xsd