Intellij IDEA 使用时出现“文件未找到”错误

6

我有一个名为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中这些测试失败了。
我认为这是由于类加载器造成的。在IDEA中,源文件存储在“target/classes”文件夹中,而测试类存储在“target/test-classes”中,这可能是原因,但我该如何进行配置呢?如果可以使用maven方式更好,我不想手动在idea中进行一些移动配置。
谢谢。
3个回答

6

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

一般来说,这是一个不好的做法。如果该文件应该与应用程序捆绑在一起,请将其存储在src/main/resources中,并使用类加载器加载:

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

如果这个文件只被您的测试使用,请将其存储在src / test / resources中,并使用类加载器(与上述相同)加载它。

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


1
啊啊啊,我漏掉了文件名开头的“/”...这个答案让我的一天都变好了。谢谢!具体的例子最棒了。(离开Java太久后回来就是这样。) - Lunivore

6
你指定了一个相对路径,但没有说明文件是如何从该位置实际读取的。
如果从类路径中读取,请确保文件被包含在内。使用Maven时,惯例是将资源放在src\main\resourcessrc\test\resources中。通常支持Maven的IDE会自动将这些位置添加到类路径中。如果由于某种原因你不能将文件保存在resources或类路径中包含的其他位置,则可以在IDEA中手动配置项目的源目录。
如果从文件系统中读取该文件,请检查在IDEA中相应的运行/调试配置中设置的工作目录。

3
Maven使用以下4个文件夹作为其类路径:
- src/main/java - 输出到target/classes中 - src/main/resources - 输出到target/classes中 - src/test/java - 输出到target/test-classes中 - src/test/resources - 输出到target/test-classes中
如果您想要使用其他文件夹进行测试(并且您有足够的理由这样做),则应像在http://maven.apache.org/plugins/maven-resources-plugin/examples/resource-directory.html中描述的那样明确地为Maven资源插件指定它。
此外,您不应该在测试中使用src文件夹中的文件,而应使用已经在JVM类路径中的target中的文件(不需要指定“target”,只需使用文件名)。

谢谢,但是关于目标,Intellij 12 仍然无法在目标文件夹中找到由Apache CXF Codegen插件生成的类。 - black sensei

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接