Java 如何从jUnit测试启动maven过滤?

Java 如何从jUnit测试启动maven过滤?,java,maven-2,junit,intellij-idea,Java,Maven 2,Junit,Intellij Idea,情境:我有一个类MyController,它与一些外部Web服务一起工作 public class MyController { private String integrationWebServiceURL; } 此类web服务URL在描述符(applicationContext.xml中的配置控制器bean期间传递 但这并不是终点——实际值存储在maven项目文件(pom.xml)中,filtering=true <pom.integration.web.service.ur

情境:我有一个类MyController,它与一些外部Web服务一起工作

public class MyController {
    private String integrationWebServiceURL;
}
此类web服务URL在描述符(applicationContext.xml中的配置控制器bean期间传递

但这并不是终点——实际值存储在maven项目文件(pom.xml)中,filtering=true

<pom.integration.web.service.url>http://mywebservices.com</pom.integration.web.service.url>
问题:我需要从IDE启动测试,以便能够使用不同的设置和IDE的调试功能。但是,如果我只是从IDE启动这个测试,而没有初步的Maven构建,那么我的web服务地址将只从application.properties获取,并等于“${pom.integration.web.service.url}”(例如,Maven过滤过程在测试之前不起作用)。如何调整Maven、Spring或jUnit以从pom.xml中提取我的值


注意:我知道我可以在测试类使用的application.properties或applicationContext.xml文件中显式设置此值,但我需要从pom.xml中提取此值。

只需使用maven运行即可,如下所示:

mvn test
然后,所有这些都应该进行pom变量的过滤。
您可以为特定属性文件提供testResources。或者applicationContext test.xml。

最好的解决方案是使用一个支持Maven的IDE,该IDE在必须构建源代码时运行。对于Eclipse,试试看,对于IDEA,Maven插件也应该这样做

如果出于某种原因这不是一个选项,那么您可以手动运行目标,例如在公共测试代码中的静态代码块中(因此它始终只执行一次):


如果您使用Eclipse,您是否尝试过M2Eclipse或M2E插件?为什么需要从POM获取值?或者更确切地说,我真正的意思是,为什么POM是存储这些信息的合适地方?我建议将这些数据保存在可交付工件之外的属性文件中,并且只在运行时访问它。然后,您可以获得属性文件的一个版本,该版本仅在测试类路径上可用,它特定于测试。@Ralph IntelliJ IDEA是我的IDE。@Andrew Spencer此值现在位于pom.xml中。遗留代码,由另一个开发人员放置在这里——我认为这是有原因的。我没有机会改变它。我认为这是一个Maven+IntelliJ的想法问题。我认为OP的需要是在IDE的干净+构建(即非Maven构建)之后测试才能工作。
<pom.integration.web.service.url>http://mywebservices.com</pom.integration.web.service.url>
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"/applicationContext.xml"})
public class MyControllerTest {

}
mvn test
static {
    Process p = Runtime.getRuntime().exec( "mvn copy-resources" );
    IOUtils.copy( p.getInputStream(), System.out );
    p.waitFor();
}