不确定是否已经在SO上回答了这个基本问题。
从参考文献以及在SO上找到的答案,我了解到在Eclipse中 ,“源文件夹”是JDT用来搜索源文件并进行 编译的文件夹。
还提到了每个源文件夹都可以有一个副本来 存储编译的类。也许这就是为什么将 项目通常的“ src”文件夹的内容编译为“ bin”文件夹的原因( 在Eclipse中使用此类src / bin项目选项时)。
问题:哪里可以存储其他非源文件,例如图标, 安全策略或数据文件?我猜这是在“常规”文件夹中,但是 (通常)在项目层次结构的哪个级别?是否可以将其放在 源文件夹中(我们为什么要这样做)?编译 或导出到.jar文件后,在哪种情况下将文件复制到 .jar中会发生什么?相对路径是否保留?
这纯粹是常规的。您可以根据需要将它们全部存储在其中src。
但是,如果您要坚持使用Maven或Gradle约定,则应该 具有以下内容:
src/main/java
src/main/resources
src/test/java
src/test/resources
Maven会将所有Java编译为target/classes并将所有资源复制到 arget/classes。为了进行测试,它将为target/test-classes。
此外,如果要访问资源,则在类所在的Jar中访问该资源,则不应使用new File("..."),Paths.get(...)而应该使用getResourcesAsStream或其对应的getResource:
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 。