【问题标题】:Where to store resources for a java project in Eclipse (images, data files, ...)?在 Eclipse 中存储 Java 项目的资源(图像、数据文件……)的位置?
【发布时间】:2014-10-31 23:29:13
【问题描述】:

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

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

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

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

【问题讨论】:

  • 你可以把它们放在src文件夹里面
  • 经常把这些东西放到 \assets 文件夹中,与 \src 文件夹平行...取决于您将如何部署生成的程序。
  • @ErstwhileIII:谢谢。你能说更多关于“取决于如何......”吗?你认为的标准是什么?
  • Java 程序是否会在您自己的计算机上、在 Web 服务器上、作为 Android 应用程序运行......所有最终部署可能对它们访问的程序和文件需要驻留的位置有自己的要求。

标签: java eclipse resources directory


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2022-10-21
    • 2023-03-21
    • 2015-01-21
    • 2015-08-07
    • 1970-01-01
    • 2019-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多