如何使用Maven创建Spring项目

时间:2014-07-14 02:27:20

标签: java spring maven

下图是我项目的结构。

我正在使用此方法初始化Spring上下文。

static ApplicationContext context 
    = new ClassPathXmlApplicationContext("classpath*:context-*.xml");

当我在Intellij IDEA运行main方法时。工作正常。

但是如果我使用Maven将项目打包到jar,并按java -jar wireless-service.jar

运行项目

我得到了这个输出。

看起来Spring没有找到context-datasource.xmlcontext-mybatis.xml等......

Resolved location pattern [classpath*:context-*.xml] to resources []
Loaded 0 bean definitions from location pattern [classpath*:context-*.xml]

那么,Spring与Maven的正确配置是什么?

enter image description here


修改

这张照片是wireless-server.jar

的结构

enter image description here


编辑2

我只是将配置路径更改为classpath*:context.xml并将context.xml创建为

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:aop="http://www.springframework.org/schema/aop"         xmlns:context="http://www.springframework.org/schema/context"
   xmlns:tx="http://www.springframework.org/schema/tx" default-autowire="byName"
   default-lazy-init="false" xmlns="http://www.springframework.org/schema/beans"
   xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
       http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
       http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
       http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
    <import resource="context-datasource.xml"></import>
    <import resource="context-mybatis.xml"></import>
    <import resource="context-resource.xml"></import>
    <import resource="context-service.xml"></import>
</beans>

然后我再次运行wireless-server.jar

我收到了不同的错误信息:

guration problem: Unable to locate Spring NamespaceHandler for XML schema namespace [http://www.springframework.org/schema/context]
Offending resource: URL [jar:file:/root/wireless-server-1.0.0-jar-with-dependencies.jar!/context-mybatis.xml]

通过运行main方法,它在Intellij IDEA中运行良好。


最后

我修改了<build>中的pom.xml部分:

<build>
    <resources>
        <resource>
            <directory>src/main/java</directory>
            <includes>
                <include>**/*.xml</include>
            </includes>
        </resource>
        <resource>
            <directory>src/main/resources</directory>
            <includes>
                <include>*.xml</include>
                <include>*.properties</include>
            </includes>
        </resource>
    </resources>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>2.2</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">
                                <manifestEntries>
                                    <Main-Class>${app.main.class}</Main-Class>
                                    <X-Compile-Source-JDK>${maven.compile.source}</X-Compile-Source-JDK>
                                    <X-Compile-Target-JDK>${maven.compile.target}</X-Compile-Target-JDK>
                                </manifestEntries>
                            </transformer>
                        </transformers>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

现在一切正常!

1 个答案:

答案 0 :(得分:2)

来自Spring 3.0 Documentation

  

5.7.2.3与通配符有关的其他说明

     

请注意&#34; classpath *:&#34;与Ant风格模式结合使用时才有效   除非实际目标文件驻留在文件系统中,否则在模式启动之前至少有一个根目录可靠。这意味着像&#34;类路径*:*。xml&#34;不会从jar文件的根目录中检索文件,而只能从扩展目录的根目录中检索文件。这源于JDK的ClassLoader.getResources()方法的限制,该方法仅返回传入的空字符串的文件系统位置(指示搜索的潜在根)。