不确定这个基本问题是否已在SO上得到解答。
从参考文献和SO上的答案,我明白在Eclipse中有一个"源文件夹"是JDT将搜索源文件并编译它们的文件夹。
还提到每个源文件夹可以具有存储编译类的对应物。也许这就是为什么通常" src"的内容。项目的文件夹被编译成" bin"文件夹(在Eclipse中使用这样的src / bin项目选项时)。
问题:存储其他非源文件的位置,例如图标,安全策略或数据文件?我想这是一个"常规"文件夹,但在项目层次结构中的哪个级别(通常)?是否可以将它放在源文件夹中(为什么我们这样做)?编译或导出到.jar文件后会发生什么情况,在哪些条件下复制的文件是.jar?是否保留了相对路径?
答案 0 :(得分:6)
这纯粹是传统的。如果需要,您可以将它们全部存储在src
中。
但是,如果你想坚持使用Maven或Gradle约定,那么你应该有类似的东西:
src/main/java
:主要源文件,将被编译然后分发(jar等)src/main/resources
:主要资源,已分发。src/test/java
:测试源文件,又名Junit测试src/test/resources
:测试资源。 Maven会将所有Java编译成target/classes
并将所有资源复制到target/classes
。对于测试,它将是target/test-classes
。
此外,如果您想要访问资源,那就是您的课程所在的资源,您不应该使用new File("...")
或Paths.get(...)
,而是getResourcesAsStream或其对应getResource }:
try (Scanner scanner = new Scanner(MyClass.class.getResourceAsStream("/myfile.txt"))) {
while (scanner.hasNextLine()) {
System.out.println(scanner.nextLine());
}
}
如果找不到/myfile.txt
,这可能会引发NPE。