在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。