【发布时间】:2011-12-15 00:51:33
【问题描述】:
情况:我有一个 MyController 类,可以与一些外部 WebServices 一起使用。
public class MyController {
private String integrationWebServiceURL;
}
此类 Web 服务 URL 在描述符(applicationContext.xml)中的配置控制器 bean 期间传递
<bean id="myController" class="com.mypath.MyController">
<property name="integrationWebServiceURL" value="${integration.web.service.url}"/>
</bean>
值是动态的,实际值存储在属性文件application.properties
integration.web.service.url=${pom.integration.web.service.url}
但这还没有结束——真正的值存储在 maven 项目文件 (pom.xml) 中,filtering=true。
<pom.integration.web.service.url>http://mywebservices.com</pom.integration.web.service.url>
因此,当我们使用 mvn install test 时,来自 pom.xml 的值被复制到 application.properties 中的适当占位符,然后我的类的测试就可以正常工作了。
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"/applicationContext.xml"})
public class MyControllerTest {
}
问题:我需要从 IDE 启动我的测试,以便能够使用不同的设置并使用 IDE 的调试功能。但是,如果我在没有初步 Maven 构建的情况下从 IDE 简单地启动此测试,那么我的 Web 服务地址将简单地从 application.properties 获取并等于“${pom.integration.web.service.url}”(例如,Maven 过滤过程不在测试之前不工作)。如何调整 Maven、Spring 或 jUnit 以从 pom.xml 中提取我的值?
注意:我知道我可以简单地在测试类使用的 application.properties 或 applicationContext.xml 文件中显式设置此值,但我需要从 pom.xml 中提取此值。
【问题讨论】:
-
如果你使用Eclipse,你试过M2Eclipse还是M2E插件?
-
为什么需要从 POM 中获取值?或者更确切地说,我真正的意思是,为什么 POM 是存储这些信息的合适位置?我建议将此类数据保存在可交付工件的 外部 属性文件中,并仅在运行时访问它。然后,您可以获得属性文件的一个版本,该版本仅在测试类路径中可用,特定于测试。
-
@Ralph IntelliJ IDEA 是我的 IDE。
-
@Andrew Spencer 这个值现在在 pom.xml 中。遗留代码,由另一位开发人员放置在这里 - 我认为这是有一些原因的。我没有机会改变它。
-
我认为这是一个 Maven + IntelliJ IDEA 问题。
标签: java maven-2 junit intellij-idea