【发布时间】:2013-09-18 01:00:31
【问题描述】:
我正在尝试使用“tomcat7-maven-plugin”对 war 文件运行集成测试。当战争被部署时,它基本上加载spring applicaitoncontext,而后者又期望类路径上的属性文件。在常规的 tomcat 实例中,我将属性文件保存在我机器上的某个位置,然后配置 catalina.properties -> common.loader 以指向该目录。但我不知道如何用这个插件来实现。
这是我尝试过的插件配置:
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.1</version>
<configuration>
<!-- port>8090</port -->
<url>http://localhost:8080/manager/text</url>
<server>TomcatServer</server>
<path>/${project.build.finalName}</path>
<!-- systemProperties>
<systemProperty>
<maven.tomcat.port>8080</maven.tomcat.port>
</systemProperty>
</systemProperties -->
<!-- if you want to use test dependencies rather than only runtime -->
<useTestClasspath>false</useTestClasspath>
<!-- optional if you want to add some extra directories into the classloader -->
<additionalClasspathDirs>
<additionalClasspathDir>${basedir}/src/test/resources</additionalClasspathDir>
</additionalClasspathDirs>
<additionalConfigFilesDir>${basedir}/src/test/resources</additionalConfigFilesDir>
</configuration>
<executions>
<execution>
<id>tomcat-run</id>
<phase>pre-integration-test</phase>
<goals>
<!-- goal>run</goal -->
<goal>run-war-only</goal>
</goals>
<configuration>
<additionalClasspathDirs>
<additionalClasspathDir>${basedir}/src/test/resources</additionalClasspathDir>
</additionalClasspathDirs>
<additionalConfigFilesDir>${basedir}/src/test/resources</additionalConfigFilesDir>
</configuration>
</execution>
<execution>
<id>tomcat-shutdown</id>
<goals>
<goal>shutdown</goal>
</goals>
<phase>post-integration-test</phase>
</execution>
</executions>
</plugin>
【问题讨论】:
-
Spring 是如何加载这些属性的?如果您使用
PropertyPlaceholderConfigurer,您可以添加一个文件模式,您可以通过src/test/resources为其提供一个文件。毕竟,后者将成为您的课程路径的一部分。如果这似乎是你所缺少的,我可以举一个更广泛的例子。 -
我使用“classpath:{env}.properties”,因为它是从生产环境中的容器类路径加载的,所以无法更改。无论如何,我最终使用 Surefire/Cargo 进行单元/容器集成测试。 TCargo 有这个简单的配置,就像一个魅力:
${basedir}/src/test/resources/{env}.properties lib 配置文件> -
我不明白为什么 additionalClasspathDirs 或 additionalConfigFilesDir 在 tomcat 插件中不起作用。我在那里错过了什么吗?我可以在tomcat(通过插件)下的爆炸战争中看到文件复制到conf文件夹中。但是conf文件夹似乎不在类路径上。顺便说一句, src/test/resources 位于 java 构建路径中,因为它在我的 porject 文件夹的 .classpath 文件中有条目,但它不是战争工件的一部分,因此您必须从外部告诉 plugin/tomcat 在哪里寻找道具文件。
-
我认为
src/test/resources已经在类路径中,而不管additional...。我从来没有用过那些。
标签: maven tomcat7 integration-testing