使用Intellij IDEA时找不到文件

时间:2013-05-20 05:58:44

标签: java maven intellij-idea

我在test-mule-flow.xml文件夹下有一个名为src/main/app的文件,我添加了一个单元测试:

MuleFlowTest extends FunctionalTestCase
@Override
public String getConfigResources() {
    return "src/main/app/test-mule-flow.xml";
}

@Test
public void test......

实际上,当我在Eclipse(Mule Studio)和maven构建中执行时,这些测试都能正确执行,但不幸的是,这些测试在Intellij IDEA版本12中失败了。

我认为这是由classloader引起的,在IDEA中,源文件位于target/classes文件夹中,测试类位于target/test-classes中,这可能是原因,但我该如何配置呢?并且它以maven方式更好,我不想手动进行一些移动配置。

感谢。

3 个答案:

答案 0 :(得分:6)

看起来您正在使用相对文件路径来加载文件。因此实际结果将取决于JVM执行测试的目录(它是“当前”目录)。

这通常是一个坏主意。如果文件应该与应用程序捆绑在一起,则存储它是src / main / resources并使用类加载器加载它:

InputStream in = MuleFlowTest.class.getResourceAsStream("/test-mule-flow.xml"));

如果它是仅由测试使用的文件,则将其存储在src / test / resources中,并使用类加载器加载它(与上面相同)。

如果确实需要将其作为文件加载,请确保当前目录始终是正确的,或者传递一个系统属性,告诉代码它应该使用哪个基目录来创建绝对路径。

答案 1 :(得分:5)

您指定了相对路径,但未提供有关如何实际读取此路径下的文件的信息。

如果从类路径中读取它,您应该确保它在那里。使用Maven,可以在src\main\resourcessrc\test\resources下放置资源。支持Maven的IDE通常会自动将这些位置添加到类路径中。如果由于某种原因您无法将文件放入resources或类路径中包含的其他位置,则可以在IDEA中手动配置项目的源目录。

如果从文件系统读取文件,则应在IDEA中的相应运行/调试配置中检查您的工作目录。

答案 2 :(得分:0)

Maven使用以下4个文件夹作为其类路径:

  • src / main / java - 目标/类中的输出
  • src / main / resources - 目标/类中的输出
  • src / test / java - 目标/测试类中的输出
  • src / test / resources - 目标/测试类中的输出

如果你想为你的测试使用任何其他文件夹(并且你有合适的理由)那么你应该为maven资源插件明确指定它,如http://maven.apache.org/plugins/maven-resources-plugin/examples/resource-directory.html

中所述

此外,您应该在测试中使用 src 文件夹中的文件,而是使用目标(并且您不应该指定“target”,只需使用文件名),已经在JVM的类路径中。