Java 在Eclipse和Maven中使用JUnit时出现类路径问题

Java 在Eclipse和Maven中使用JUnit时出现类路径问题,java,eclipse,maven-2,junit,Java,Eclipse,Maven 2,Junit,在JUnit测试中,我使用以下代码加载特定于测试的配置文件: InputStream configFile = getClass().getResourceAsStream("config.xml"); 当我通过eclipse运行测试时,它要求xml文件与测试文件位于同一目录中 当我使用maven构建项目时,它要求xml位于src/test/resources中,以便将其复制到目标/测试类中 如何使它们都只使用一个文件?尝试将src/test/resources/目录添加为Eclipse项目中

在JUnit测试中,我使用以下代码加载特定于测试的配置文件:

InputStream configFile = getClass().getResourceAsStream("config.xml");
当我通过eclipse运行测试时,它要求xml文件与测试文件位于同一目录中

当我使用maven构建项目时,它要求xml位于
src/test/resources
中,以便将其复制到
目标/测试类中


如何使它们都只使用一个文件?

尝试将
src/test/resources/
目录添加为Eclipse项目中的源文件夹。这样,当Eclipse尝试运行单元测试时,它应该位于类路径上。

如果您在测试时需要它,您可以通过文件系统加载它,这里的上下文对于这两种情况都应该相同:

new FileInputStream(new File("target/test-classes/your.file"));

不太好看,但它可以工作

将config.xml文件放在src/test/resources中,并将src/test/resources作为源文件夹添加到Eclipse中


另一个问题是
getResourceAsStream(“config.xml”)
如何处理包。如果调用它的类位于
com.mycompany.which
包中,那么
getResourceAsStream
也希望config.xml位于相同的路径中。但是,这是类路径中的同一路径,而不是文件系统中的同一路径。您可以将文件放在src/test/resources-src/test/resources/com/mycompany/which/config.xml下的同一目录结构中,也可以在路径中添加一个前导“/”,这使得
getResourceAsStream
从类路径的底部加载文件-因此如果将其更改为
getResourceAsStream(“/config.xml”)
您可以将文件放在src/test/resources/config.xml中

我知道这是一个老问题,但我无意中发现了它,发现上面的答案都没有提到Maven Eclipse插件,这很奇怪。运行
mvneclipse:eclipse
,它将为您在eclipse中的“Java构建路径”添加src/main/resources和src/test/resources等

它有一大堆东西,你也可以从那里配置(如果你需要偏离惯例,如果你不需要,那么它已经准备好了):


一般来说,如果您使用的是Maven,不要在Eclipse中手动更改内容。永远不要提交您的.classpath/.project,而只是使用Maven Eclipse插件来生成(或更新)这些文件。这样,您的项目就有了一个配置源MAVEN,而不是手动设置,您最终不得不告诉其他人使用它并记住自己等等。如果它是一个Maven项目:从源代码控制中检查它,运行“mvn eclipse:eclipse”,如果您的POM不需要工作,它应该在eclipse中工作

就这样!问题出在哪里。谢谢遗憾的是,我花了整整一天的时间才找到这一条保留意见。解决了让资源包在Maven中正常运行但在Eclipse中运行失败的测试问题。谢谢