Jetty Maven无法从父项目中找到dev.properties

时间:2014-07-02 16:32:36

标签: java spring maven spring-mvc maven-jetty-plugin

我们有一个父项目,下面有多个子项目。其中一些正在制造战争,另一些正在生产一个罐子。

在父项目中,有一个dev.properties文件。它位于目录

  

/src/main/resources/config/environments/dev.properties

多个子项目正确使用此文件时出现问题。

导致错误的项目在pom.xml中具有以下jetty配置

<profiles>
    <profile>
        <id>jetty</id>
        <build>
            <finalName>${project.artifactId}</finalName>
            <plugins>
                <plugin>
                    <groupId>org.mortbay.jetty</groupId>
                    <artifactId>maven-jetty-plugin</artifactId>
                    <version>6.1.16</version>
                    <configuration>
                        <scanIntervalSeconds>10</scanIntervalSeconds>
                        <stopPort>8005</stopPort>
                        <stopKey>STOP</stopKey>
                        <contextPath>/</contextPath>
                        <useTestClasspath>true</useTestClasspath>
                    </configuration>
                    <executions>
                        <execution>
                            <id>start-jetty</id>
                            <phase>pre-integration-test</phase>
                            <goals>
                                <goal>run</goal>
                            </goals>
                            <configuration>
                                <scanIntervalSeconds>0</scanIntervalSeconds>
                                <daemon>true</daemon>
                            </configuration>
                        </execution>
                        <execution>
                            <id>stop-jetty</id>
                            <phase>post-integration-test</phase>
                            <goals>
                                <goal>stop</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    </profile>

</profiles>

这个项目引用依赖我们的管理项目如下:

<dependency>
            <groupId>sample.project</groupId>
            <artifactId>sample-project-admin-service</artifactId>
            <version>0.1.0-SNAPSHOT</version>
        </dependency>

在示例项目和文件sample-project-admin-service-context.xml中有以下配置:

<bean id="cacheMan"
        class="org.infinispan.spring.provider.SpringRemoteCacheManagerFactoryBean"
        p:configurationPropertiesFileLocation="/WEB-INF/classes/config/environments/${SERVER_ENV}.properties" />

这应该读取属性文件并初始化cacheMan。 sample-project-admin-service-context.xml位于路径中:

  

/sample-project-admin-service/src/main/resources/META-INF/spring/flash-air-admin-service-context.xml

当我们制作war文件并将其部署到tomcat时。应用程序正确部署没有任何问题。但是当我尝试使用jetty加载它时,我收到以下错误:

  

无法解析对bean&#39; cacheManager&#39;的引用设置bean时   property&#39; cacheManager&#39 ;;嵌套异常是   org.springframework.beans.factory.BeanCreationException:错误   使用名称&#39; cacheManager&#39;创建bean在类路径资源中定义   [META-INF / spring / sample-project-admin-service-context.xml]:调用   init方法失败;嵌套异常是java.io.FileNotFoundException:   无法打开ServletContext资源   [/WEB-INF/classes/config/environments/dev.properties]:

使用以下命令运行Jetty maven:

  

mvn install -Pjetty

任何帮助将不胜感激。

提前致谢

2 个答案:

答案 0 :(得分:0)

在部署时,所有适合于src / main / resources的文件都打包在类路径中。然后,当Ioc容器尝试实例化cacheMan bean时,它无法找到它。麻烦的是你无法在定义时恢复父文件内的文件,因为它有一条不透明的路径Get reosurce in a modular project,唯一要做的就是:

  • 从子模块项目中的父项目移动文件

并以这种方式更改bean定义。

如果路径是

  

/src/main/resources/config/environments/dev.properties

你的bean定义是:

<bean id="cacheMan"
    class="org.infinispan.spring.provider.SpringRemoteCacheManagerFactoryBean"
    p:configurationPropertiesFileLocation="/config/environments/dev.properties" />

以这种方式,Ioc容器能够找到文件

答案 1 :(得分:0)

好的,我好像已经解决了这个问题。我遵循的步骤是:

这是jetty插件的最终配置文件:

<profile>
            <id>jetty</id>
            <build>
                <finalName>${project.artifactId}</finalName>
                <plugins>
                    <plugin>
                        <groupId>org.eclipse.jetty</groupId>
                        <artifactId>jetty-maven-plugin</artifactId>
                        <version>9.2.1.v20140609</version>
                        <configuration>
                            <scanIntervalSeconds>10</scanIntervalSeconds>
                            <stopPort>8005</stopPort>
                            <stopKey>STOP</stopKey>
                            <contextPath>/</contextPath>
                            <useTestClasspath>true</useTestClasspath>
                        </configuration>
                        <executions>
                            <execution>
                                <id>start-jetty</id>
                                <phase>pre-integration-test</phase>
                                <goals>
                                    <goal>run</goal>
                                </goals>
                                <configuration>
                                    <scanIntervalSeconds>0</scanIntervalSeconds>
                                    <daemon>true</daemon>
                                </configuration>
                            </execution>
                            <execution>
                                <id>stop-jetty</id>
                                <phase>post-integration-test</phase>
                                <goals>
                                    <goal>stop</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>

如您所见,我已将版本更改为9.2.1.v20140609。这似乎解决了这个问题。

谢谢