【发布时间】:2015-03-10 21:32:00
【问题描述】:
当我只在我的计算机上使用应用程序时,使用 eclipse 导出可运行的 jar 文件非常简单。程序正在使用的任何文件(精灵表、音轨等)都只存在于我的计算机上,因此仅将 jar 发送到另一台机器是行不通的。
打包一个 jar 以及所有必要文件以便我可以在任何机器上运行程序的最简单方法是什么?
【问题讨论】:
标签: java eclipse file jar reference
当我只在我的计算机上使用应用程序时,使用 eclipse 导出可运行的 jar 文件非常简单。程序正在使用的任何文件(精灵表、音轨等)都只存在于我的计算机上,因此仅将 jar 发送到另一台机器是行不通的。
打包一个 jar 以及所有必要文件以便我可以在任何机器上运行程序的最简单方法是什么?
【问题讨论】:
标签: java eclipse file jar reference
我从您的标签中看到您在 Eclipse 中工作。我不确定此方法是否适用于其他 IDE,如果您手动执行所有操作,我认为它根本不会起作用(它依赖于编译器自动将资源复制到 bin 文件夹。
最简单的方法(至少我使用的)是定义另一个源文件夹(我喜欢res)。
然后您可以将包添加到此源文件夹并转储相关图像。然后重建您的项目。
最后,您可以使用getClass().getResourceAsStream("package/path/file_name.whatever"); 来获取您的文件。
导出为jar 后,它应该可以工作,即使在其他机器上也是如此。
【讨论】:
com.whatever.ui 包中。所以从项目根目录来看,它将是<project root>/res/com/whatever/ui。我不知道普遍接受的方式是什么。您可以将文件转储到res,如果您愿意,可以将它们称为file_name.whatever...
如果您不要求其他文件是文件系统上的实际文件(这意味着您不能使用File、FileInputStream 等),那么您可以使用资源系统。如果将它们放在 JAR 中,则可以像这样访问它们:
InputStream fileStream = SomeClassInYourJarFile.class
.getResourceAsStream("/path/to/file.png");
此示例将为您提供从 JAR 文件中的 /path/to/file.png 条目读取的 InputStream,即文件夹“路径”中的文件夹“to”中的“file.png”文件。
这并不要求将文件放在 JAR 文件中 - 它可以从存储 .class 文件的任何位置加载它们,无论 JAR 与否。如果您将它们放在源文件夹中,Eclipse 会自动将它们复制到该位置 - 因此,如果您有一个包 path.to 包含一个名为 file.png 的文件,则上述行也可以工作。
【讨论】:
File,因为它不是一个文件 - 除非你的程序将它复制到一个会破坏把东西装进你的 JAR 里)
FileInputStream)、JAR 条目、网络连接、字节数组等的 InputStream。基本上是您可能想要从中读取数据的任何内容。
getResourceAsStream 必须返回 null(或者您忘记实际调用它)。如果找不到资源,它将返回 null - 您传递给它的路径是什么,硬盘驱动器上的实际文件在哪里(在它进入 JAR 之前),以及您的 .class 文件和 .java 文件在哪里?