为什么我无法在Maven中使用Junittesting来访问src / test / resources?

我有一个问题运行下面的代码:

configService.setMainConfig("src/test/resources/MainConfig.xml"); 

从一个Junit @Before方法中。

这是Maven构build目标文件夹的方式吗?

直接访问MainConfig.xmlsrc/test/resources目录内容放置在CLASSPATH的根目录下。

更确切地说: src/test/resources被复制到target/test-classes ,所以如果你有以下的项目结构:

 . └── src └── test ├── java │  └── foo │  └── C.java └── resources ├── a.xml └── foo └── b.xml 

这将导致与以下testingCLASSPATH内容:

  • /foo/C.class
  • /a.xml
  • /foo/b.xml

要实际访问Java源文件,使用getClass().getResource("/MainConfig.xml").getFile()

我猜setMainConfig期望资源的path,它会加载使用ClassLoader,而不是一个相对的文件path。 如果你链接到这个神秘的configService.setMainConfig方法的javadoc将会有所帮助。

如果我的猜测是正确的,那么path应该是MainConfig.xml。 Mave将src/test/resources的内容复制到target/test-classes (IIRC)文件夹中。 而这个test-classes文件夹位于unit testing的类path中。