ошибка «невозможно найти Spring NamespaceHandler» - PullRequest
16 голосов
/ 26 июля 2010

Я создаю отдельное приложение Sava с Spring для обработки доступа JDBC.Приложение отлично работает в каждом тесте, и я решил, что мне нужно развернуть jar для наших клиентов.

У них может не быть пружины в их classpath, поэтому я использовал maven-assembly-plugin для обработки создания jar с помощьюзависимости.

Однако, когда я пытаюсь запустить приложение:

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 / основные / ресурсы.И его помещают в базу target / packagename.

The 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>

Ответы [ 5 ]

33 голосов
/ 19 декабря 2012

Сегодня я столкнулся с этой проблемой с помощью плагина maven-assembly-plugin.Поиск привел меня к этому вопросу, и просмотр сообщения об ошибке показал, что, возможно, я использовал не тот плагин.Поэтому я переключился на maven-shade-plugin.Насколько я могу судить, это работает отлично.У меня есть исполняемый файл jar, который включает в себя несколько модулей Spring, а также Apache MQ.Вот соответствующий бит из моего pom.xml:

<build>
<finalName>sample-broker</finalName>
<plugins>
  ...
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>2.0</version>
    <executions>
      <execution>
        <phase>package</phase>
        <goals>
          <goal>shade</goal>
        </goals>
        <configuration>
          <transformers>
            <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>
            <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
              <mainClass>org.XYZ</mainClass>
            </transformer>
          </transformers>
        </configuration>
      </execution>
    </executions>
  </plugin>
</plugins>
</build>
9 голосов
/ 26 июля 2010

Я нашел ошибку, ошибка заключается в нефиксированной ошибке в плагине maven-assembly . Я использовал следующий обходной путь:

Сначала прокомментировал код сборки maven в моем 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 = /

4 голосов
/ 26 июля 2010

Похоже на ошибку в плагине Maven Assembly - MASSEMBLY-360 , и как описано в этой записи блога здесь .

Короче говоря, файлы метаданных в JAR-файлах Spring, которые обрабатывают пространства имен Spring, обрабатываются maven.

2 голосов
/ 25 февраля 2016

onejar-maven-plugin позволяет разрешить противоречия maven и spring путем создания одного jar-файла с зависимостями.Он создает оболочку вокруг вашего файла jar, помещая его в другой jar (one-jar).

    <plugin>
            <groupId>org.dstovall</groupId>
            <artifactId>onejar-maven-plugin</artifactId>
            <version>1.4.4</version>
            <executions>
              <execution>
                <goals>
                    <goal>one-jar</goal>
                </goals>
              </execution>
            </executions>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>2.3.2</version>
            <configuration>
                <archive>
                    <manifest>
                        <mainClass>your.package.App</mainClass>
                    </manifest>
                </archive>
            </configuration>
        </plugin>

<!-- outside build tag in pom.xml -->
<pluginRepositories>
        <pluginRepository>
            <id>onejar-maven-plugin.googlecode.com</id>
            <url>http://onejar-maven-plugin.googlecode.com/svn/mavenrepo</url>
        </pluginRepository>
</pluginRepositories>
0 голосов
/ 07 июля 2017

В дополнение к решению, опубликованному @GrampaJohn, мне также нужно было убедиться, что я упаковывал необходимые библиотеки в сгенерированный файл JAR, а не извлекал их в сгенерированный JAR.

В Eclipse Mars, после внесения изменений в pom.xml (добавлен плагин maven-shade, как предложено @GrampaJohn), выполните следующие действия:

Файл -> Экспорт -> Выбрать папку Java -> Запускаемый файл JAR -> введите Конфигурация запуска (основной файл), пункт назначения экспорта и в Обработка библиотек, выберите «Пакет необходимых библиотек в сгенерированный JAR -> Нажмите готово

.

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