如何在JAR中包含资源和依赖项?

时间:2014-04-21 09:48:57

标签: java eclipse jar build

我有一个Java项目,它依赖于一个外部库,并包含一个名为template.pdf的资源。该库位于工作区外的文件夹中,并由项目使用Project -> Properties -> Build Path -> Libraries -> Add External Jar引用。资源文件当前位于我工作区的bin/文件夹中,因此我可以使用PDFProject.class.getResourceAsStream("/template.pdf")访问它,它在Eclipse和JAR文件中都有效,假设我使用方法1导出JAR文件下方。

我的目标是能够将项目导出到包含资源和依赖项的JAR,同时还能够从Eclipse和JAR内部运行代码,而无需更改用于访问资源的代码或必须维护任何文件的多个副本。到目前为止,我已经尝试过:

  1. 勾选Export -> JAR file框,使用Export all output folders for checked projects导出。这会导出包含资源文件的JAR,并允许使用来自Eclipse和JAR的相同路径("/template.pdf")访问资源,但不提供将依赖项打包到JAR中的选项。
  2. 使用Export -> Runnable JAR file导出并选中[Extract/Package] required libraries into generated JAR选项。这将导出带有依赖项的jar,但不包括资源文件。
  3. 将资源文件移动到项目的src/目录中,然后使用上面的方法2导出。这正确地将资源和依赖项打包到JAR中,但由于"/template.pdf"不再位于类路径上,因此代码将无法在未经修改的情况下在Eclipse中运行。
  4. 我意识到我可以在导出后手动将资源放入JAR,或者在bin/src/中保留资源文件的副本,或者将库的源直接复制到我的项目中,但这些解决方案作为一般惯例似乎效率低下。我的大部分搜索似乎都表明像Ant或Maven这样的构建工具可能提供了一个可接受的解决方案,但如果可能的话,我希望在此时避免解决这个学习曲线。有没有办法只使用基本的Eclipse导出选项和文件夹层次结构来创建上面指定的JAR文件?

    编辑:ThorbjørnRavnAndersen在下面的评论确实帮助我发现了一个很大的错误,关于我如何将资源文件添加到项目中。我没有使用Eclipse的Import功能,而是通过操作系统手动将文件复制到源文件夹,然后使用右键单击菜单中的Refresh更新Eclipse中的Package Explorer。我错误地认为这会对项目进行必要的更新,但我之后还需要清理项目以使文件反映在输出文件夹中(或者只使用导入功能在第一个文件中添加文件位)。

    这实际上解决了我的问题,因为我只需要维护源文件夹中的资源文件的副本,但它确实会导致在磁盘上有多个文件副本。对于我的小项目,这不是问题。但是,对于包含许多资源文件的大型项目,这可能会导致重复文件的大量磁盘使用。当然必须有一种方法可以在没有重复的情况下获得类似的结果吗?

2 个答案:

答案 0 :(得分:0)

创建一个新的源文件夹并将template.pdf放在其下。然后更改get resourceAsStream()以包含新文件夹名称。

的getResourceAsStream( “\资源\ template.pdf”)

答案 1 :(得分:0)

如果jar在路径中有文件说在资源文件夹内,你可以在Project-&gt; Build路径中添加jar并使用以下InputStream is = ClassLoader.getSystemResourceAsStream(“resources / sample.txt”); < / p>

这适合我。