繁体   English   中英

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

[英]How to include resources AND dependencies in JAR?

我有一个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,并允许使用相同的路径( "/template.pdf" )从Eclipse和JAR访问资源,但是没有提供将依赖关系打包在JAR内部的选项。
  2. 使用[Extract/Package] required libraries into generated JAR使用Export -> Runnable JAR file [Extract/Package] required libraries into generated JAR选定的[Extract/Package] required libraries into generated JAR选项中。 这将导出具有内部依赖项的jar,但会忽略资源文件。
  3. 将资源文件移到项目的src/目录中,然后使用上面的方法2导出。 这样可以将资源和依赖项正确地打包到JAR中,但是如果不进行修改,则代码不会在Eclipse中运行,因为"/template.pdf"不再位于类路径中。

我意识到,可以在导出后手动将资源放入JAR,或者将资源文件的副本保留在bin/src/ ,或者将库的源代码直接复制到我的项目中,但是这些解决方案在一般情况下似乎效率不高。 我的大部分搜索似乎都表明,Ant或Maven之类的构建工具可能会提供可接受的解决方案,但如果可能的话,我宁愿避免此时解决这一学习难题。 有没有一种方法可以仅使用基本的Eclipse导出选项和文件夹层次结构来创建上述指定的JAR文件?

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

通过允许我只需要维护位于源文件夹中的资源文件的副本,就可以从根本上解决我的问题,但是它的确导致了磁盘上文件的多个副本。 对于我的小型项目,这不是问题。 但是,对于具有许多资源文件的大型项目,这可能导致重复文件占用大量磁盘。 当然,必须有一种无需重复就能达到类似结果的方法吗?

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

getResourceAsStream(“ \\ resources \\ template.pdf”)

如果jar文件在该文件的路径中位于资源文件夹内,则可以在Project-> Build路径中添加jar文件,并使用以下InputStream = ClassLoader.getSystemResourceAsStream(“ resources / sample.txt”);

这对我有用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM