我们有一个父项目,下面有多个子项目。其中一些正在制造战争,另一些正在生产一个罐子。
在父项目中,有一个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
任何帮助将不胜感激。
提前致谢
答案 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。这似乎解决了这个问题。
谢谢