在Eclipse中为Java项目存储资源的位置(图像,数据文件……)?

不确定这个基本问题是否已在SO上得到解答。

从SO上的参考和答案中我了解到,在Eclipse中,“源文件夹”是JDT将搜索源文件并编译它们的文件夹。

还提到每个源文件夹可以具有存储编译类的对应物。 也许这就是为什么项目的通常“src”文件夹的内容被编译成“bin”文件夹(在Eclipse中使用这样的src / bin项目选项时)。

问题 :存储其他非源文件的位置,例如图标,安全策略或数据文件? 我想这是在“常规”文件夹中,但在项目层次结构中的哪个级别(通常)? 是否可以将它放在源文件夹中(为什么我们这样做)? 编译或导出到.jar文件后会发生什么情况,在哪些情况下是.jar中复制的文件? 相对路径是否保留?

这纯粹是传统的。 如果需要,您可以将它们全部存储在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

此外,如果您想访问资源,那就是您的类所在的Jar,您不应该使用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。