Spring 4.2 - Dependancy Injection - http://www.springframework.org/schema/p错误

时间:2015-08-08 11:25:30

标签: spring dependency-injection maven-3

我正在为执行返回的DI做一本简单的例子:

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 [META-INF/spring/app-context.xml]

app-context.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"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="provider" class="com.apress.prospring4.ch2.HelloWorldMessageProvider"/> 
    <bean id="renderer" class="com.apress.prospring4.ch2.StandardOutMessageRenderer" p:messageProvider-ref="provider"/>
</beans>

所有流行的行为都很好...... 没有DI的豆子的外部额外练习也很好...... 使用Spring 4.2,Maven 3,JVM 1.8。 有什么想法吗?

编辑我已将p:符号更改为

<bean id="renderer" class="com.apress.prospring4.ch2.StandardOutMessageRenderer">
    <property name="messageProvider" ref="provider" />
</bean>

并删除了p命名空间引用,以便app现在可以正常工作,这很好,因为我在那里学习新手。

尽管如此,我仍然想知道如何让p命名空间工作! 作为旁注,我看不到任何“http://www.springframework.org/schema/p”,尽管我可以看到“http://www.springframework.org/schema/beans”;可能是我缺乏知识。

1 个答案:

答案 0 :(得分:0)

将应用程序打包到单个可执行文件Jar中时遇到此错误(直接在eclipse / IntelliJ中运行时工作)。

问题是在打包过程中,spring.schemas文件被覆盖在META-INF文件夹中。

您可以使用maven shade插件解决这个问题,并使用mvn clean package构建jar

您需要使用变换器来附加弹簧文件(并将主类更改为您自己的)

<plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>2.4</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                        <configuration>
                            <transformers>
                                <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                    <mainClass>tom.lightwaverf.Main</mainClass>
                                </transformer>
                                <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>
                            </transformers>
                        </configuration>
                    </execution>
                </executions>
            </plugin>