복붙노트

[SPRING] "Spring NamespaceHandler를 찾을 수 없습니다"오류

SPRING

"Spring NamespaceHandler를 찾을 수 없습니다"오류

JDBC 액세스를 처리하기 위해 Spring을 사용하는 독립형 Sava 응용 프로그램을 만들고 있습니다. 이 응용 프로그램은 모든 테스트에서 잘 작동하며 클라이언트를 배치하기 위해서는 항아리가 필요하다고 결정했습니다.

클래스 패스에 스프링이 없을 수도 있으므로 의존 관계가있는 jar 생성을 처리하기 위해 maven-assembly-plugin을 사용했습니다.

그러나 응용 프로그램을 실행하려고하면 :

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 base에 위치합니다.

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>

해결법

  1. ==============================

    1.오늘 maven-assembly-plugin으로이 문제에 부딪혔습니다. 검색을 통해이 질문에 대한 답변을 얻을 수 있었고, 버그 보고서에서 잘못된 플러그인을 사용하고 있다고 제안했습니다. 그래서 나는 maven-shade-plugin으로 전환했다. 내가 말할 수있는 한 완벽하게 작동합니다. 아파치 MQ뿐만 아니라 다수의 스프링 모듈을 통합 한 실행 가능한 jar가 있습니다. 내 pom.xml의 관련 비트는 다음과 같습니다.

    오늘 maven-assembly-plugin으로이 문제에 부딪혔습니다. 검색을 통해이 질문에 대한 답변을 얻을 수 있었고, 버그 보고서에서 잘못된 플러그인을 사용하고 있다고 제안했습니다. 그래서 나는 maven-shade-plugin으로 전환했다. 내가 말할 수있는 한 완벽하게 작동합니다. 아파치 MQ뿐만 아니라 다수의 스프링 모듈을 통합 한 실행 가능한 jar가 있습니다. 내 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>
    
  2. ==============================

    2.오류가 발견되었습니다. 버그는 메이븐 어셈블리 플러그인의 수정되지 않은 버그에 있습니다. 다음 해결 방법을 사용했습니다.

    오류가 발견되었습니다. 버그는 메이븐 어셈블리 플러그인의 수정되지 않은 버그에 있습니다. 다음 해결 방법을 사용했습니다.

    먼저 pom의 maven-assembly 코드를 주석 처리했습니다. 그런 다음 maben-dependency-plugin을 사용하여 대상의 lib 폴더에 종속성을 복사했습니다.

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

    마지막으로 필자는 lib와 제공된 인수를 사용하여 응용 프로그램을 실행하는 응용 프로그램과 함께 배포되는 bash 스크립트를 작성했습니다.

    java -cp lib/*:myproject-0.0.1-SNAPSHOT.jar org.foo.myproject.App $@
    

    파이썬에서 응용 프로그램을 빌드해야합니다 = /

  3. ==============================

    3.Maven Assembly Plugin - MASSEMBLY-360의 버그처럼 보입니다. 여기에서이 블로그 항목에 설명되어 있습니다.

    Maven Assembly Plugin - MASSEMBLY-360의 버그처럼 보입니다. 여기에서이 블로그 항목에 설명되어 있습니다.

    간단히 말해 Spring 네임 스페이스를 처리하는 Spring JAR의 메타 데이터 파일이 maven에 의해 엉망이되고있다.

  4. ==============================

    4.onejar-maven-plugin을 사용하면 의존성이있는 단일 jar 파일을 만들어 maven과 spring 모순을 해결할 수 있습니다. jar 파일을 다른 jar (one-jar)에 두어 래퍼를 작성합니다.

    onejar-maven-plugin을 사용하면 의존성이있는 단일 jar 파일을 만들어 maven과 spring 모순을 해결할 수 있습니다. 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>
    
  5. ==============================

    5.@GrampaJohn이 게시 한 솔루션 외에도 생성 된 JAR 파일을 생성 된 JAR 파일로 추출하는 대신 생성 된 JAR 파일에 필요한 라이브러리를 패키징하고 있는지 확인해야했습니다.

    @GrampaJohn이 게시 한 솔루션 외에도 생성 된 JAR 파일을 생성 된 JAR 파일로 추출하는 대신 생성 된 JAR 파일에 필요한 라이브러리를 패키징하고 있는지 확인해야했습니다.

    이클립스 화성에서는 pom.xml (@GrampaJohn이 제안한 maven-shade 플러그인 추가)을 변경 한 후 다음 단계를 따르십시오.

    .

  6. from https://stackoverflow.com/questions/3335203/unable-to-locate-spring-namespacehandler-error by cc-by-sa and MIT license