Я создаю автономное приложение Савы с Spring, для обработки доступа JDBC. Приложение хорошо работает на каждом тесте, и я решил, что мне нужна банка, которая будет развернута наши клиенты.
У них не могло бы быть пружины в их пути к классу, таким образом, я использовал плагин блока знатока для обработки создания банки с зависимостями.
Однако, когда я пытаюсь запустить приложение:
java -jar target/myproject-0.0.1-SNAPSHOT-jar-with-dependencies.jar
Который бросает следующую ошибку:
Exception in thread "main" org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Unable to locate Spring NamespaceHandler for XML schema namespace [http://www.springframework.org/schema/p]
Offending resource: class path resource [applicationContext.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)
...and so on to the database access class of this project.
Файл applicationContext.xml находится в projectbase/src/main/resources. И ее помещенный в основу target/packagename.
applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
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">
<bean id="dataSourceDesenv" class="org.apache.commons.dbcp.BasicDataSource"... />
<bean id="simpleJdbcDaoSupport" class="org.springframework.jdbc.core.simple.SimpleJdbcDaoSupport"
p:dataSource-ref="dataSourceDesenv" />
<bean id="simpleJdbcTemplate" class="org.springframework.jdbc.core.simple.SimpleJdbcTemplate">
<constructor-arg ref="dataSourceDesenv" />
</bean>
</beans>
Я обнаружил ошибку, ошибка заключается в нефиксированной ошибке в подключаемом модуле maven-assembly . Я использовал следующий обходной путь:
Сначала закомментировал код maven-assembly в моем pom. Затем я скопировал зависимости в папку lib в целевой папке, используя maben-dependency-plugin:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
Затем я использовал maven-jar-plugin для настройки моей исполняемой jar:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.3.1</version>
<configuration>
<archive>
<index>true</index>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>org.foo.myproject.App</mainClass>
</manifest>
<manifestEntries>
<mode>development</mode>
<url>${pom.url}</url>
<key>value</key>
</manifestEntries>
</archive>
</configuration>
</plugin>
Наконец, я создал сценарий bash, который развертывается с приложением, которое запускает мое приложение с его библиотеками и любыми предоставленными аргументами:
java -cp lib/*:myproject-0.0.1-SNAPSHOT.jar org.foo.myproject.App $@
Я должен был создать приложение на python = /
Похоже на ошибку в подключаемом модуле сборки Maven - MASSEMBLY-360 , и как описано в этой записи блога здесь .
Короче говоря, файлы метаданных в Spring JAR, которые обрабатывают пространства имен Spring, изменяются maven.