Java 如何在test和main之间共享资源?
我正在开发一个web应用程序 这是我的项目结构Java 如何在test和main之间共享资源?,java,maven,java-8,maven-3,Java,Maven,Java 8,Maven 3,我正在开发一个web应用程序 这是我的项目结构 src/ ├── main │ ├── java │ ├── resources │ └── webapp └── test ├── java └── resources 在我的测试中,我想从java中的类调用一个方法,该类使用参考资料中的文件 所以我想知道如何在main和test之间共享我的资源 我不想每次编辑文件时都将其复制到测试资源 我尝试了SymLink,但出现错误“无法复制到测试类,因为文件不存在。”` 这就
src/
├── main
│ ├── java
│ ├── resources
│ └── webapp
└── test
├── java
└── resources
在我的测试中,我想从java
中的类调用一个方法,该类使用参考资料中的文件
所以我想知道如何在main
和test
之间共享我的资源
我不想每次编辑文件时都将其复制到测试资源
我尝试了SymLink,但出现错误“无法复制到测试类,因为文件不存在。”`
这就是我在重要情况下访问资源的方式
class.getResourceAsStream("/data.yml");
编辑
显然,Maven在默认情况下确实在main和test之间共享资源,但这里的情况并非如此
当我构建时,我可以从target/classes
下的main
查看我的资源,但在使用Maven的target/test classes
中没有任何内容,默认情况下,src/main/resources
下的文件与src/test/resources
共享。只要把它们放在那里,就可以从test
文件夹中访问它们。在test
中可以看到main
中存在的文件
因此,如果测试和主目录都需要,您可以将资源放在主目录树上
如果测试只需要这些资源,请将它们放在测试子树上。您是在谈论以结尾的文件。properties
?@JasonZ否,这是一个yaml文件,但它有什么关系?我已经编辑了我的问题,以显示我如何在类中访问它们。我的资源已经存在于main中,但是当我构建它时,它不会被复制到测试类
。我的资源已经存在于main中,但是当我构建它时,它不会被复制到测试类
。嘿,你认为你可以看看我的编辑吗?我不确定我错过了什么。我到处找都找不到。它们在不同的类装入器中。这就是为什么您应该使用MyClass.class.getClassLoader().getResourceAsStream(“data.yml”)
而不是您编写的内容。这些资源不在测试类路径中。它应该出现在测试类中,但它不在那里。它们不应该出现。区别在于类路径,而不是文件夹。如果您直接使用文件,那么是的,您将遇到问题。如果你像我写的那样使用资源,就不会。